常用结论:a << b的值实际上就是a乘以2的b次方!!!
位操作基础
位操作是程序设计中对位模式或二进制数的一元和二元操作。lz所以3进制在一般计算机应该不能进行位操作吧。
基本的位操作符有与、或、异或、取反、左移、右移这6种,它们的运算规则如下所示:
| 符号 | 描述 | 运算规则 |
| & | 与 | 两个位都为1时,结果才为1 |
| | | 或 | 两个位都为0时,结果才为0 |
| ^ | 异或 | 两个位相同为0,相异为1 |
| ~ | 取反 | 0变1,1变0 |
| << | 左移 | 各二进位全部左移若干位,高位丢弃,低位补0 |
| >> | 右移 | 各二进位全部右移若干位,对无符号数,高位补0,有符号数,各编译器处理方法不一样,有的补符号位(算术右移),有的补0(逻辑右移) |
左移运算符(<<)
(比如 1<<2 1的二进制为 0000 0001 左移2位 0000 0100.)
将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)。
例:a = a<< 2将a的二进制位左移2位,右补0,
左移1位后a = a *2;
若左移时舍弃的高位不包含1,则每左移一位,相当于该数乘以2。
右移运算符(>>)
(>>是位运算符,假如x=9,用二进制表示就是01001,然后右移一位,变成00100,)
将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。
操作数每右移一位,相当于该数除以2。
例如:a = a>> 2 将a的二进制位右移2位,
左补0 or 补1得看被移数是正还是负。
左移运算 左移运算符“<<”是双目运算符。其功能把“<< ”左边的运算数的各二进位全部左移若干位,由“<<”右边的数指定移动的位数,
高位丢弃,低位补0。例如: a<<4 指把a的各二进位向左移动4位。如a=00000011(十进制3),左移4位后为00110000(十进制48)。
右移运算右移运算符“>>”是双目运算符。其功能是把“>> ”左边的运算数的各二进位全部右移若干位,“>>”右边的数指定移动的位数。
例如:设 a=15,a>>2 表示把000001111右移为00000011(十进制3)。应该说明的是,对于有符号数,在右移时,符号位将随同移动。当为正数时, 最高位补0,而为负数时,符号位为1,最高位是补0或是补1 取决于编译系统的规定。Turbo C和很多系统规定为补1。
位运算(i>>j&1)是什么意思
把 i 算术右移 j 位,然后检测最低位是否为1
返回值为1则最低位就是1,为0则是0
异或的性质:
1、交换律
2、结合律(即(a^b)^c == a^(b^c))
3、对于任何数x,都有x^x=0,x^0=x
4、自反性: a^b^b=a^0=a;
if (a^b == c) a^c == b;
本文介绍了位操作基础,包括与、或、异或、取反、左移、右移6种基本位操作符。详细说明了左移运算符(<<)和右移运算符(>>)的运算规则,如左移相当于乘以2,右移相当于除以2。还解释了位运算(i>>j&1)的含义,即把i算术右移j位后检测最低位是否为1。
3009

被折叠的 条评论
为什么被折叠?



