二进制的位运算
(一)按位与&
两位全为1,结果才为1
0&0=0;0&1=0;1&0=0;1&1=1
例如:51&5 即0011 0011 & 0000 0101 =0000 0001 因此51&5=1。
特殊用法
(1)清零。如果想将一个单元清零,即使其全部二进制位为0,只要与一个各位都是零的数值相与,结果为零。
(2)取一个数中指定位。
例如:设X=10101110,取X的低四位,用X&0000 1111=0000 1110即可得到。
(二)按位或 |
只要有一个为1,结果就为1。
0|0=0; 0|1=1;1|0=1;1|1=1;
例如:51|5 即0011 0011 | 0000 0101 =0011 0111 因此51|5=55
(三)异或 ^
两个相应位为“异”(值不同),则该位结果为1,否则为0
0^ 0=0; 0^ 1=1; 1^ 0=1; 1^1=0;
例如:51^ 5 即0011 0011 ^ 0000 0101 =0011 0110 因此51^5=54
特殊用法
(1) 与1相异或,使特定位翻转
方法:找一个数,对应X要翻转的位,该数的对应为1,其余位为零,此数与X对应位异或即可。
例如:X=1010 1110,使X低四位翻转,用X^0000 1111=1010 0001即可得到。
(2) 与0相异或,保留原值
例如:X^0000 0000 =1010 1110
(四)取反与运算~
对一个二进制数按位取反,即将0变为1,1变0
~ 1=0 ;~0=1
(五)左移<<
将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)
例如: 2<<1 =4 10<<1=100
若左移时舍弃的高位不包含1,则每左移一位,相当于该数乘以2。
(六)右移>>
将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。若右移时舍高位不是1(即不是负数),操作数每右移一位,相当于该数除以2。
左补0还是补1得看被移数是正还是负。
>>>逻辑右移:运算规则是:低位溢出,高位补0
原码:所谓原码就是二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。
反码:反码表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。
原码10010= 反码11101 (10010,1为符号码,故为负)
补码:补码表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1。
- java 二进制(原码 反码 补码),位运算,移位运算,约瑟夫问题
- 关于二进制和位运算(小结)
- 二进制、位运算
- Java从入门到精通08-二进制、位运算、移位运算
- 二进制及位运算
- 《编程之美 》2.1 位运算实现—交换两个整数、求和、整数的二进制表达中1的个数
- Java二进制,原码、反码、补码、位运算
- 位运算实现反转字节和求二进制整数中1的个数(无循环)
- java 二进制(原码 反码 补码),位运算,移位运算,约瑟夫问题
- JAVA:二进制(原码 反码 补码),位运算,移位运算,约瑟夫问题(5)
- 二进制中1的个数----位运算
- 二进制、位运算、位移运算
- 使用位运算实现有符号的十进制正负数转二进制输出
- 程序员面试金典——二进制小数_(位运算)
- java 二进制(原码 反码 补码),位运算,移位运算,约瑟夫问题
- java_位运算加法_8位二进制
- 位运算---整数的二进制表达中有多少个1
- HDU 5573 Binary Tree (二进制,位运算)
- 计算机程序的思维逻辑 (4) - 整数的二进制表示与位运算
- 用位运算实现十进制转换为二进制