位运算符允许对整型数中指定的位进行求值和 *** 作。进行位运算时会先转为二进制,然后再做响应的计算处理。
进制转换工具
位运算符一览表:
运算符号
意义
运算对象类型
运算结果类型
实例
~
非运算
整型,字符型
整型
~a
&
与运算
a & b
|
或运算
a | b
^
异或运算
a ^ b
<<
位左移运算
a<<4
>>
位右移运算
a>>2
对应的两个二进制位都为1时,结果位为1,否则为0。
如:5和6,二进制分别为101、110,5&6结果位4。
101 110 ------- 100 // 4 #把100转为10进制结果为4二、| 或
对应的两个二进制位只要有一个为1时,结果位为1,否则为0。
如:5和6,二进制分别为101、110,5|6结果位7。
101 110 ------- 111 // 7 #把111转为10进制结果为7三、^ 异或
对应的两个二进制位不同时,结果位为1,否为为0。
如:5和6,二进制分别为101、110,5^6结果位3。
101 110 ------- 011 // 3 #把011转为10进制结果为3四、~ 取反
对应的每个二进制位取反。
如:5,二进制为101,~5结果位-6。
101 ------- 010 // 1.用32位表示二进制 0000 0000 0000 0000 0000 0000 0000 0101 --------------------------------------------------- 1111 1111 1111 1111 1111 1111 1111 0010 // 2.取反后的32位二进制值为 1111 1111 1111 1111 1111 1111 1111 0010 ,看第一位,第1位是1时为负数,否者为正数,这里是负数。 1111 1111 1111 1111 1111 1111 1111 0 010 ----------------------------------------------------- 111 1111 1111 1111 1111 1111 1111 0 010 // 3.负数是用补码表示的,补码是原码取反+1,所以这里要反过来处理 // 3.1 减1 111 1111 1111 1111 1111 1111 1111 0 010 ---------------------------------------------------- 111 1111 1111 1111 1111 1111 1111 0 001 // 3.2 取反 111 1111 1111 1111 1111 1111 1111 0 001 ---------------------------------------------------- 000 0000 0000 0000 0000 0000 0000 0 110 // 4.所以110转10进制为6,这里是负数,最终结果为-6 //2进制转10进制 110 1*2²+1*2¹+0*2º = 6 = -6五、<< 左移
对应的各个二进制位全部左移n位,高位要放弃,低位补0,由于左移后丢弃符号位,可能会改变数字的正负性。
如:5,二进制分别为101,5<<1左移一位结果为10。
0000 0000 0000 0000 0000 0000 0000 0101 ----------------------------------------- 000 0000 0000 0000 0000 0000 0000 01010 // 10 #把1010转为10进制结果为10
六、<< 右移位移计算规律:
5<<1 = 5*2¹ = 10
5<<2 = 5*2² = 20
5<<3 = 5*2³ = 40
对应的各个二进制位全部左移n位,符号位保持不变。为正数时,符号位为0,最高位补0。 为负数时,符号位为1。
如:5,二进制分别为101,5>>1左移一位结果为2。
>1; //2 ?> 0000 0000 0000 0000 0000 0000 0000 0101 ----------------------------------------- 00000 0000 0000 0000 0000 0000 0000 010 // 2 #把10转为10进制结果为2
位移计算规律:
8>>1 = 8/2¹ = 4
8>>2 = 8/2² = 2
8>>3 = 8/2³ = 1
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)