-
移位运算
2020-07-16 16:59:05 -
移位运算(无符号移位运算,有符号移位运算)
2019-07-03 15:59:38移位运算,所有移位以5和-5为例移位运算左移(<<)正数负数带符号右移(>>)(右移向前面补对应的符号位所对应的值(正数补0,负数补1))正数负数不带符号右移(>>>)(>>>为java独有语法)正数...移位运算,所有移位以5和-5为例
移位运算
可以移位运算的类型有:iuint,int,lang等类型.我们本次使用int类型
一个int类型占4个字节,共32位,带符号位,所以最高位位符号位(使用0,1表示符号位)我们首先需要了解正数和负数的二进制码分别如何表示(以5和-5为例)
正数:0000 0000 0000 0101
负数:1000 0000 0000 0101移位操作在二进制中都是补码移位在转会为原码得到相应的值
正数的反码,补码与原码相同
负数的反码为除符号位全部取反
负数的补码为反码加1所以 在对正数进行移位操作时就是对原码进行操作
负数是对补码操作,操作完成后再转换为原码得到对应的值
所以-5的补码为:1111 1111 1111 1011左移(<<)
正数
5左移三位:0000 0000 0010 1000 =40
负数
-5左移三位:补码:1111 1111 1101 0111
原码:1000 0000 0010 1000
得:-40带符号右移(>>)(右移向前面补对应的符号位所对应的值(正数补0,负数补1))
正数
5右移三位:0000 0000 0000 0000 =0
负数
-5右移三位:补码:1111 1111 1111 1111
反码:1111 1111 1111 1110
原码:1000 0000 0000 0001
得:-1不带符号右移(>>>)(>>>为java独有语法)
正数
5右移三位:0000 0000 0000 0000 =0
负数
-5右移三位:补码:0001 1111 1111 1111 1111 1111 1111 1111
反码:0001 f f f f f f 1110
得:536 870 911
收藏数
6,337
精华内容
2,534