位移运算
...大约 2 分钟计算机基础
位移运算符包括左移运算符(<<
)、算术右移运算符(>>
)和逻辑右移运算符(>>>
)。
一、左移运算符(<<
)
左移运算符将操作数的所有位向左移动指定的位数,右边用0填充。左移一位相当于乘以2。
语法
int result = a << n;
a
:要进行左移的整数。n
:要移动的位数。
示例
int a = 5; // 5的二进制表示为 00000000 00000000 00000000 00000101
int result = a << 2; // 左移两位:00000000 00000000 00000000 00010100
System.out.println(result); // 输出 20
二、算术右移运算符(>>
)
算术右移运算符将操作数的所有位向右移动指定的位数,左边用符号位(即原数的最高位)填充。右移一位相当于除以2(取整)。
语法
int result = a >> n;
a
:要进行右移的整数。n
:要移动的位数。
示例
int a = 20; // 20的二进制表示为 00000000 00000000 00000000 00010100
int result = a >> 2; // 右移两位:00000000 00000000 00000000 00000101
System.out.println(result); // 输出 5
对负数的处理
int b = -20; // -20的二进制表示(补码形式)为 11111111 11111111 11111111 11101100
int result = b >> 2; // 右移两位:11111111 11111111 11111111 11111011
System.out.println(result); // 输出 -5
三、逻辑右移运算符(>>>
)
逻辑右移运算符将操作数的所有位向右移动指定的位数,左边用0填充。仅适用于无符号右移。
语法
int result = a >>> n;
a
:要进行右移的整数。n
:要移动的位数。
示例
int a = 20; // 20的二进制表示为 00000000 00000000 00000000 00010100
int result = a >>> 2; // 逻辑右移两位:00000000 00000000 00000000 00000101
System.out.println(result); // 输出 5
对负数的处理
int b = -20; // -20的二进制表示(补码形式)为 11111111 11111111 11111111 11101100
int result = b >>> 2; // 逻辑右移两位:00111111 11111111 11111111 11111011
System.out.println(result); // 输出 1073741819
四、总结
对于正数,符号位是0,对于负数,符号位是1。
- 左移(
<<
):将所有位向左移动指定位数,右边用0填充,相当于乘以2的若干次方。 - 算术右移(
>>
):将所有位向右移动指定位数,左边用符号位填充,相当于除以2的若干次方。 - 逻辑右移(
>>>
):将所有位向右移动指定位数,左边用0填充,适用于无符号右移。
算术右移和逻辑右移区别:
算术右移会根据符号位(即最左边的一位)进行填充。逻辑右移不考虑符号位,无论原数是正数还是负数,移位后高位都填充0。这种操作不会保留原数的符号。
Powered by Waline v3.2.0