使二进制文字看起来更清晰的分隔符

时间:2020-05-30 19:38:05

标签: c gcc7

我正在尝试以一种更干净的格式编写二进制文字。

我了解可以对整数文字执行以下操作:

int x = 1234_5678_9999;

我认为这适用于二进制文字,所以我尝试了:

uint32_t branch_bitmask = 0b0000_1111_0000_0000_0000_0000_0000_0000;

对于第一个下划线之后的所有内容,这都会给我一个“无效的后缀”错误。

是否有下划线的替代方法,使我可以用一种更简洁的方式编写二进制文字:

uint32_t branch_bitmask = 0b00001111000000000000000000000000;

1 个答案:

答案 0 :(得分:1)

如果总是具有相同数量的位数(在示例中为32),则可以#define这样的宏:

#define BITS32(b1,b2,b3,b4,b5,b6,b7,b8) ( \
  ((b1) << 28) + \
  ((b2) << 24) + \
  ((b3) << 20) + \
  ((b4) << 16) + \
  ((b5) << 12) + \
  ((b6) << 8) + \
  ((b7) << 4) + \
  (b8))

然后这样称呼它:

uint32_t branch_bitmask = BITS32(0b0000,0b1111,0b0000,0b0000,0b0000,0b0000,0b0000,0b0000);

或者您可以进一步使用宏中的##来附加0b

但是对我来说,简单的答案一直是使用十六进制,因为一个十六进制数字是4位。