网站html5模板,摄影官网,新手初做网站,宜城建设局网站任何信息在计算机中都是采用二进制表示的#xff0c;数据在计算机中是以补码形式存储的#xff0c;位运算就是直接对整数在内存中的二进制位进行运算。由于位运算直接对内存数据进行操作#xff0c;不需要转换成十进制#xff0c;因此处理速度非常快。
一、位运算符
C 提…任何信息在计算机中都是采用二进制表示的数据在计算机中是以补码形式存储的位运算就是直接对整数在内存中的二进制位进行运算。由于位运算直接对内存数据进行操作不需要转换成十进制因此处理速度非常快。
一、位运算符
C 提供了按位与、按位或| 、按位异或^、取反~、左移、右移这 6 种位运算符。 这些运算符只能用于整型操作数即只能用于带符号或无符号的 char、short、int 与 long 类型。
按位与两个位都为1时结果才为1|按位或两个位都为0时结果才为0^按位异或两个位相同为0相异为1~取反0变11变0左移各二进位全部左移若干位高位丢弃低位补0右移各二进位全部右移若干位对无符号数高位补0有符号数各编译器处理方法不一样有的补符号位算术右移有的补0逻辑右移
1按位与运算符 “ab”是指将参加运算的两个整数a和b按二进制位进行“与”运算。 运算规则000; 010; 100; 111; 即两位同时为“1”结果才为“1”否则为0 例如35 即 0000 0011 0000 0101 0000 0001 因此35的值得1。 另负数按补码形式参加按位与运算。 按位与比较实用的例子 1、比如我们经常要用的是否被2整除一般都写成 if(n % 2 0) 可以换成 if((n1) 0) 2、按位与运算可以取出一个数中指定位。例如要取出整数84从左边算起的第3、4、5、7、8位只要执行84 59,因为84对应的二进制为0101010059对应的二进制为0011101101010100 00111011 00010000 可知84从左边算起的第3、4、5、7、8位分别是0、1、0、0、0。 3、清零。如果想将一个单元清零使其全部二进制位为0只要与一个各位都为零的数值相与结果为零。
与运算的用途
1清零
如果想将一个单元清零即使其全部二进制位为0只要与一个各位都为零的数值相与结果为零。
2取一个数的指定位
比如取数 X1010 1110 的低4位只需要另找一个数Y令Y的低4位为1其余位为0即Y0000 1111然后将X与Y进行按位与运算XY0000 1110即可得到X的指定位。
3判断奇偶
只要根据最未位是0还是1来决定为0就是偶数为1就是奇数。因此可以用if ((a 1) 0)代替if (a % 2 0)来判断a是不是偶数。
4整数幂
判断一个数n 是不是2的整数幂。比如642^6,所以输出“yes”,而65无法表示成2的整数幂的形式所以输出“NO”。
#includebits/stdc.h
using namespace std;
int main()
{ int n;cinn;if(n(n-1))coutNO;else coutYes;
} 2按位或运算符| 运算规则0|00 0|11 1|01 1|11 或运算的用途
1常用来对一个数据的某些位设置为1
比如将数 X1010 1110 的低4位设置为1只需要另找一个数Y令Y的低4位为1其余位为0即Y0000 1111然后将X与Y进行按位或运算X|Y1010 1111即可得到。
3按位异或运算符^ 运算规则0 ^ 00 0 ^ 11 1^ 01 1^10 异或的几条性质: 1、交换律2、结合律 (a^b)^c a^(b^c)3、对于任何数x都有 x^x0x^0x4、自反性: a^b^ba^0a; 异或运算的用途
1翻转指定位
比如将数 X1010 1110 的低4位进行翻转只需要另找一个数Y令Y的低4位为1其余位为0即Y0000 1111然后将X与Y进行异或运算X^Y1010 0001即可得到。
2与0相异或值不变
例如1010 1110 ^ 0000 0000 1010 1110
4按位取反运算符~ 按位取反运算符~是指将整数的各个二进制位都取反即1变为00变为1。 5左移运算符
左移运算符是用来将一个数的各二进制位左移若干位移动的位数由右操作数指定右操作数必须是非负值其右边空出的位用0填补高位左移溢出则舍弃该高位。
在高位没有1的情况下左移1位相当于该数乘以2左移2位相当于该数乘以2*24,15260即乘了。 但此结论只适用于该数左移时被溢出舍弃的高位中不包含1的情况。
例如1432 结果为60 因为143转换为进制为10001111左移2得00111100 结果为60。
定义将一个运算对象的各二进制位全部左移若干位左边的二进制位丢弃右边补0。
设 a1010 1110a a 2 将a的二进制位左移2位、右补0即得a1011 1000。
若左移时舍弃的高位不包含1则每左移一位相当于该数乘以2。
6右移运算符
定义将一个数的各二进制位全部右移若干位正数左补0负数左补1右边丢弃。
例如aa2 将a的二进制位右移2位左补0 或者 左补1得看被移数是正还是负。
操作数每右移一位相当于该数除以2。
7复合赋值运算符 位运算符与赋值运算符结合组成新的复合赋值运算符它们是 1、 例a b 相当于aa b 2、| 例a |b 相当于aa |b 3、 例a b 相当于aa b 4、 例ab 相当于aa b 5、^ 例a ^ b 相当 aa ^b