移位操作之(<< >>)和(<<< >>>)的区别

2022-12-02 09:31:58 浏览数 (1)

两个箭头的

<< >> 是有符号移位

<< 表示左移,不分正负数,低位补0;

正数:r = 20 << 2 20的二进制补码:0001 0100 向左移动两位后:0101 0000 结果:r = 80 负数:r = -20 << 2 -20 的二进制原码 :1001 0100 -20 的二进制反码 :1110 1011 -20 的二进制补码 :1110 1100 左移两位后的补码:1011 0000 反码:1010 1111 原码:1101 0000 结果:r = -80

>> 表示右移,如果该数为正,则高位补0,若为负数,则高位补1;

正数:r = 20 >> 2 20的二进制补码:0001 0100 向右移动两位后:0000 0101 结果:r = 5 负数:r = -20 >> 2 -20 的二进制原码 :1001 0100 -20 的二进制反码 :1110 1011 -20 的二进制补码 :1110 1100 右移两位后的补码:1111 1011 反码:1111 1010 原码:1000 0101 结果:r = -5

三个箭头的

>>> 是无符号移位

>>> 表示无符号右移,也叫逻辑右移,即 若该数为正,则高位补0, 若该数为负数,则右移后高位同样补0

正数: r = 20 >>> 2 的结果与 r = 20 >> 2 相同; 负数: r = -20 >>> 2 注:以下数据类型默认为int 32位 -20:源码:10000000 00000000 00000000 00010100 反码:11111111 11111111 11111111 11101011 补码:11111111 11111111 11111111 11101100 右移:00111111 11111111 11111111 11111011 结果:r = 1073741819

箭头朝哪,就是朝哪移 在数字没有溢出的前提下,对于正数和负数,

左移n位相当于乘以2的n次方。 右移n位相当于除以2的n次方。

位运算符的优先级~的优先级最高,其次是<<、>><<<、>>>,再次是&,然后是^,优先级最低的是|

0 人点赞