位运算

左移(<<)

尖括号指向左边(<<),a<<b表示a向左移动b位,即a = a * 2^b

a向左移动b位: 先将a转为2进制,然后将a转为的二进制整体向左移动b位,低位用0补齐

左移位例子

System.out.println("移位前" + Integer.toBinaryString(10));
System.out.println("左移位后" + Integer.toBinaryString(10 << 2));
/* 移位前: 00000000 00000000 00000000 00001010 移位后: 00000000 00000000 00000000 00101000 */

右移(>>)

尖括号指向右边(>>),a>>b表示a向右移动b位,即a = a / 2^b

a向左移动b位: 先将a转为2进制,然后将a转为的二进制整体向右移动b位,非负整数高位用0补齐,负整数用1补齐

右移位例子

System.out.println("移位前" + Integer.toBinaryString(10));
System.out.println("右移位后" + Integer.toBinaryString(10 >> 2));
/* 移位前: 00000000 00000000 00000000 00001010 移位后: 00000000 00000000 00000000 00000010 */

位与(&)

将两个数转换为2进制,相应位置上两者都为1才为1,否则为0

System.out.println("运算前" + Integer.toBinaryString(5) + " " + Integer.toBinaryString(3));
System.out.println("位运算" + Integer.toBinaryString(5 & 3));
/* 运算前: 5: 00000000 00000000 00000000 00000101 3: 00000000 00000000 00000000 00000011 运算后: 00000000 00000000 00000000 00000001 */

位或(|)

将两个数转换为2进制,相应位置上两者都为0才为0,否则为1

System.out.println("运算前" + Integer.toBinaryString(5) + " " + Integer.toBinaryString(3));
System.out.println("位运算" + Integer.toBinaryString(5 | 3));
/* 运算前: 5: 00000000 00000000 00000000 00000101 3: 00000000 00000000 00000000 00000011 运算后: 00000000 00000000 00000000 00000111 */

位异或(^)

将两个数转换为2进制,相应位置上两者不同为1,否则为0

System.out.println("运算前" + Integer.toBinaryString(5) + " " + Integer.toBinaryString(3));
System.out.println("位运算" + Integer.toBinaryString(5 ^ 3));
/* 运算前: 5: 00000000 00000000 00000000 00000101 3: 00000000 00000000 00000000 00000011 运算后: 00000000 00000000 00000000 00000110 */

位非(~)

将数字转为2进制,把所有的0变为1,把0变为1

System.out.println("位运算" + Integer.toBinaryString(~5));
/* 运算前: 5: 00000000 00000000 00000000 00000101 运算后: 11111111 11111111 11111111 11111010 */
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务