C语言中有逻辑运算和算术运算两种操作,数据在内存中都是以二进制转换其补码存放的。显然,直接使用位操作要比其他操作效率高,下面我们来通过一些 代码看一下两者的区别:
int a = -1; // 1111 1111 1111 1111 1111 1111 1111 1111 (补码)
printf("%d\n", a >> 1); // 1111 1111 1111 1111 1111 1111 1111 1111 (补码)右移高位补符号位
printf("%d\n", a << 1); // 1111 1111 1111 1111 1111 1111 1111 1110 (补码)左移低位补0
system("pause");
return 0;
逻辑运算 | 算术运算 | |
---|---|---|
左移 | 低位补0 | 低位补0 |
右移 | 高位补0 | 高位补符号位 |