1.位运算
- &:与
- 如果 x = 1并且 y = 1,那么(x & y) = 1;否则 (x & y)= 0
- |:或
- 如果 x = 1 或者 y = 1,那么 (x | y)= 1;否则 (x | y)= 0
- ~:取反
- ^:异或
- 如果 x == y,那么 (x ^ y)= 0;否则(x ^ y)= 1
- <<:左移
- x << 1 等价于 x *= 2,左移后 右边补0
- >>:右移
- x >> 1 等价于 x /= 2
- 小于int的类型,以为以int的方式来做,结果是int
- 对于unsigned类型,左边补0
- 对于signed类型,左边补 最高位
- 移位的位数不要用负数,没有定义这种行为:x << -2; // No!!
#include<stdio.h>
int main(int argc, const char *argv)
{
unsigned char c= 0xAA;
printf(" c = %hhx\n", c);
printf("~c = %hhx\n", (char)~c);
printf("~c = %hhx\n", (char)~c);
return 0;
}
2.输出一个数的二进制
#include<stdio.h>
int main(int argc, const char *argv)
{
int number = 0xaa;
unsigned int mask = 1u<<31;
for(; mask; mask >>= 1){
printf("%d", number & mask ? 1 : 0);
}
printf("\n");
return 0;
}