位运算就是把其他进制的整数,换算成二进制再进行运算。主要有 &, |, , ^ , ~, <<, >> 。注意,位运算的优先度高于逻辑运算的&&,||,!的。
如何求其进制的二进制
我在上一篇已经总结过了,这里就不在重复了,具体就是用余数定理分解。
链接地址:https://blog.csdn.net/qq_40140790/article/details/100083236
那么负数的二进制是怎么样的呢? 其实也简单。先采用余数定理分解得出其正数的二进制值,再采用它的补码(正数的补码和原码相同,负数的补码是该数的绝对值的二进制形式,按位取反后再加1)(注意,最高位为符号为,负数为1,正数为0)显示,简单来说就是 “ 先按正数转换,然后取反加1。”
例如:
要将十进制的-10用二进制表示,先将10用二进制表示:
-10
0000 0000 0000 1010
取反:
11 1111 1111 010111
加1:
1111 1111 1111 0110
所以,-10的二进制表示就是:1111 1111 1111 0110
按位与运算符(&)
参加运算的两个数,按二进制位进行“与”运算。
运算规则:只有两个数的二进制同时为1,结果才为1,否则为0。(负数按补码形式参加按位与运算)
即 0 & 0= 0 ,0 & 1= 0,1 & 0= 0, 1 & 1= 1。
例:3 &5 即 0000 0011 & 0000 0101 = 0000 0001 ,所以 3 & 5的值为1。
按位或运算符(|)
参加运算的两个数,按二进制位进行“或”运算。
运算规则:参加运算的两个数只要两个数中的一个为1,结果就为1。
即 0 | 0= 0 , 1 | 0= 1 , 0 | 1= 1 , 1 | 1= 1 。
例:2 | 4 即 0000 0010 | 0000 0100 = 0000 0110 ,所以2 | 4的值为 6 。
异或运算符(^)
参加运算的两个数,按二进制位进行“异或”运算。
运算规则:参加运算的两个数,如果两个相应位为“异”(值不同),则该位结果为1,否则为0。
即 0 ^ 0=0 , 0 ^ 1= 1 , 1 ^ 0= 1 , 1 ^ 1= 0 。
例: 2 ^ 4 即 0000 0010 ^ 0000 0100 =0000 0110 ,所以 2 ^ 4 的值为6 。
最后说一下我们最关心的左右移问题。
左移(<<)
参加运算的两个数,换算为二进制后,进行左移运算,用来将一个数各二进制位全部向左移动若干位。
1 2 3 4 5 |
|
注意,观察可以发现,左移一位的结果就是原值乘2,左移两位的结果就是原值乘4。规律就是乘于2的n次方。
右移(>>)
参加运算的两个数,换算为二进制后,进行右移运算,用来将一个数各二进制位全部向右移动若干位。
1 2 3 4 5 |
|
注意,观察可取整。以发现,右移一位的结果就是原值除2,左移两位的结果就是原值除4,规律就是除于2的n次方。注意哦,除了以后没有小数位的,都是取整
位运算的实用小技巧
https://blog.csdn.net/iov3Rain/article/details/70238996