16进制与二进制对应的常用数

关注微信公众号塔容万物

二进制下连续1的表示

0x1 = 0b1
0x3 = 0b11
0x7 = 0b111
0xf = 0b1111
0x1f = 0b11111
0x3f = 0b111111
0x7f = 0b1111111
0xff = 0b11111111

交替1和0

0x5 = 0b0101
0xa = 0b1010

连续2个1连续两个0

0x3 = 0b0011
0xc = 0b1100

连续4个1连续4个0

0xf = 0b1111
0xf0 = 0b11110000

1-4位

0x1 = 0b0001
0x2 = 0b0010
0x4 = 0b0100
0x8 = 0b1000

1-8位

0x1 = 0b00000001
0x2 = 0b00000010
0x4 = 0b00000100
0x8 = 0b00001000
0x10 = 0b00010000
0x20 = 0b00100000
0x40 = 0b01000000
0x80 = 0b10000000

快速打印一个数字的前n位

for (int i = 0; i < n; i++) {
  printf("%d", (num >> (n - i - 1)) & 1);
}

快速打印一个数字的后n位

for (int i = 0; i < n; i++) {
  printf("%d", (num >> i) & 1);
}

快速打印一个数字的第n位

printf("%d", (num >> (n - 1)) & 1);

快速将一个数字的第n位置为1

num |= (1 << (n - 1));

快速将一个数字的第n位置为0

num &= ~(1 << (n - 1));

快速将一个数字的第n位设为0/1(x)

num &= ~(1 << (n - 1));
num |= (x << (n - 1));

快速将一个数字的第n位取反

num ^= (1 << (n - 1));