位移操作符 <<左移 与 >>右移 的基本逻辑
1:<< 左移操作符
2:>> 右移操作符
(注:位移操作符的操作数只能是整数)
<< 左移操作符 与 >> 右移操作符 都是移二进制位操作符
整数的二进制表现形式有三种:原码,反码,补码。
举一个正数10二进制表示的列子:(int占四个字节,也就是32个比特位(1B==32b))
int a=10; (其中正数的原码,反码,补码是相同的。)
原码:按照一个数的正负,直接写出他的二进制形式,就是他的原码。
a的二进制原码:00000000000000000000000000001010
a的二进制反码:00000000000000000000000000001010
a的二进制补码:00000000000000000000000000001010
int b=-10; (其中负数的原码,反码,补码是要经过计算的,计算方法下滑在分割线内)
b的二进制原码:1000000000000000000000000000 1010
b的二进制反码:11111111111111111111111111111111 0101
b的二进制补码:11111111111111111111111111111111 0110
我们会发现,a的第一位二进制是0,的b第一位二进制是1
其实二进制的第一位就是表示数的正负的,1表示负,0表示正,这一个二进制位被称为符号位,在负数的原码,反码中不会被改变。
负数原码,反码,补码的计算:
原码:符号位为1,再直接写出他的二进制形式。
反码:符号位不变,其他位按位取反。
补码:反码+1。
通过补码计算原码:
1:原码=补码-1 再 符号位不变按位取反
2:原码=补码符号位不变按位取反 再 +1
负数算补码的重要性:计算机中存储的是补码。位移操作符 <<左移 与 >>右移 都是移动整数的补码。
正数:位移操作符 <<左移 与 >>右移 的基本逻辑:
int a=10; (其中正数的原码,反码,补码是相同的。)
a的二进制补码:00000000000000000000000000001010
a<<2: : 00|00000000000000000000000000101000| 32+8==40
前面去掉两位0,后面补齐两位0
a的二进制补码: 00000000000000000000000000001010
a>>1 : | 00000000000000000000000000000101|0 4+1=5
后面去掉1位,后面补齐一位0
负数:位移操作符 <<左移 与 >>右移 的基本逻辑:
int a=-10; (其中负数的原码,反码,补码是要经过计算的,计算方法上滑在第一个分割线内)
a的二进制原码:1000000000000000000000000000 1010
a的二进制反码:11111111111111111111111111111111 0101
a的二进制补码:11111111111111111111111111111111 0110
a的二进制补码:11111111111111111111111111111111 0110
a<<2: : 11|111111111111111111111111111111 0110 00|
计算成原码 : 10000000000000000000000000 100101 -(32+8)==-40
前面去掉两位0,后面补齐两位0
a的二进制补码:11111111111111111111111111111111 0110
a>>1: : | 111111111111111111111111111111111011|0
后面去掉1位,后面补齐一位1(因为去掉的一位的后面一位是1)
计算成原码 : | 1000000000000000000000000000101|0 -(4+1)=-5
位移操作符 <<左移 与 >>右移 的基本逻辑相关推荐
- 关于程序中的操作符左移和右移问题
程序中经常会看到<< 5或者>>等符号,这表示左移和右移操作.比如你一串数字是123456789, 那么你左移5位(<< 5)就会得到678900000,如果你右移 ...
- 操作符(一)(算数操作符,位移操作符,位操作符)
目录: 1.算术操作符 2.位移操作符 (1) << 左移操作符(高位丢掉,低位补0): eg:将1左移1位 (2) >> 右移操作符: eg1:将1右移一位 eg2:将 ...
- c++ 操作符大全-算术操作符、关系操作符、逻辑操作符、位操作符、自增自减操作符、赋值操作符、条件操作符、逗号操作符、操作符优先级
文章目录 操作符 1.算术操作符 2.关系操作符 3.逻辑操作符 4.位操作符 5.自增自减操作符 6.赋值操作符 7.条件操作符 8.逗号操作符 9.操作符优先级 操作符 计算机程序可以看作一串运算 ...
- 初探C++标准库:移位左移、右移操作符的重载,C++标准库
C++标准库 移位左移.右移操作符的重载 C++标准库 移位左移.右移操作符的重载 怎么把变量/常量通过移位操作符,移到一个类的对象中去呢? #include <stdio.h>const ...
- C语言操作符—左移右移操作符
文章目录 1.移位操作符 十进制转二进制 1.2 << 左移操作符 1.2.1 >> 左移操作符 -- 正数 1.2.2 >> 左移操作符 -- 负数 1.3 &g ...
- Java 位运算理解 Java中的位移运算整理 Java右移n位 Java左移n位
Java 位运算理解 Java中的位移运算整理 Java右移n位 Java左移n位 一.概述 1.在浏览一篇文章时,看到一个介绍 ,使用位移操作替代乘除法 ,若位移多位该怎么计算呢? 二.代码理解 ...
- 8.C语言——位操作符与位移操作符
本文采用了<C Primer Plus>.<C陷阱与缺陷>以及比特科技的教学视频. 对C语言位操作符与位移操作符进行了详细讲解,为了加深印象,每一个知识点均有例题和实用讲解 目 ...
- php中左移和右移,c语言左移和右移的示例详解
逻辑移位,简单理解就是物理上按位进行的左右移动,两头用0进行补充,不关心数值的符号问题. 算术移位,同样也是物理上按位进行的左右移动,两头用0进行补充,但必须确保符号位不改变. 算术移位指令 算术移位 ...
- 计算机原理与基础 —— C语言中的左移与右移
1.双目运算符 位移位运算符是将数据看成二进制数,对其进行向左或向右移动若干位的运算. 位移位运算符分为左移和右移两种,均为双目运算符. 例如: 8 >> 3 (意思是8向右移动3 ...
最新文章
- LeetCode Add Binary
- C# 各版本更新简介
- python控制结构实训_Python 控制结构
- 大道至简(第六章)读后感
- 高效的动态URL限流实现
- .NET 6新特性试用 | 总结:我最喜欢的5个特性
- Python中的虚拟环境-virtualenv
- ajax传递json对象 php,ajax 和 php 相互传递 JSON对象(转载)
- 计算机电缆检测报告,天联牌计算机电缆详细介绍
- [裴礼文数学分析中的典型问题与方法习题参考解答]4.3.17
- zookeeper使用问题汇总
- 用花生壳搭建个人简易静态网站
- windows 搭建kms服务器激活_搭建kms服务器,自建KMS激活服务器的两种方法
- 利用Power BI制作分级地图报表
- JZOJ2499 东风谷早苗
- 企业使用it人力外包可以解决哪些问题
- C语言求x的y次方,fun函数实现x的y次方的计算,main函数中调用fun函数
- 三星Z Fold2 5G评测:折叠屏手机的最强形态
- Jweb-Servlet 知识点+代码实操
- html5如何快速选择工具使用技巧,PS新手抠图必掌握!超有用的快速选择工具