左移运算符(<<)
将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)。
按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。
- 在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方。
右移运算符(>>)
将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。
按二进制形式把所有的数字向右移动对应位移位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1
- 右移一位相当于除2,右移n位相当于除以2的n次方。
无符号右移运算符规则
按二进制形式把所有的数字向右移动对应位数,低位移出(舍弃),高位的空位补零。对于正数来说和带符号右移相同,对于负数来说不同
为什么~1=-2
1在计算机中用二进制表示
0b0000_0000_0000_0000_0000_0000_0000_0001
1取反后在计算机中用二进制表示
0b1111_1111_1111_1111_1111_1111_1111_1110
因为该数的最高为是1表示一个负数,在计算机中负数使用的是补码表示,所以该二进制表示的是一个补码。
那么该数的绝对值是通过对补码取反,然后加1。
0b0000_0000_0000_0000_0000_0000_0000_0010
所以为2,在加上符号位,所以为-2。
网友评论