另外常用的int类型是有符号数,位长取决于你的电脑的位长,电脑是64位的int就是64位的。
左移 <<
右移>>
首先无符号数没啥好说的,不管左移还是右移都是补0
有符号数,以int为例(64位)
老样子,机器内存的是补码
以7fffffffffffffffff为例
从前三个输出看,没有办法直接给int赋最大值(16进制),全f的话会报错,也就是不能直接赋值符号位,
但是第四个输出来看,这里的运算是逻辑位移,输出-2(ffffffffffffffe,找了半天也没找到怎样输出正儿八经的16进制数),也就是位移包括符号位.
之后再右移多少位都是-1(ffffff...f),就是补码位移规则
综上:
。。。。好乱
左移运算符(<<)将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)。
例:a = a <<2 将a的二进制位左移2位,右补0,
左移1位后a = a * 2
若左移时舍弃的高位不包含1,则每左移一位,相当于该数乘以2。
右移运算符(>>)
将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。
操作数每右移一位,相当于该数除以2。
例如:a = a >>2 将a的二进制位右移2位,
左补0 or 补1 得看被移数是正还是负。