使二进制文字看起来更干净的分隔符
Separator to make binary literals look cleaner
我正在尝试以更简洁的格式编写二进制文字。
我知道可以对整数文字执行以下操作:
int x = 1234_5678_9999;
我认为这适用于二进制文字,所以我尝试了:
uint32_t branch_bitmask = 0b0000_1111_0000_0000_0000_0000_0000_0000;
第一个下划线之后的所有内容都会出现“无效后缀”错误。
有没有下划线的替代方法,可以让我以一种更简洁的方式编写二进制文字:
uint32_t branch_bitmask = 0b00001111000000000000000000000000;
如果您始终拥有相同数量的位数(在您的示例中为 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 位。
我正在尝试以更简洁的格式编写二进制文字。
我知道可以对整数文字执行以下操作:
int x = 1234_5678_9999;
我认为这适用于二进制文字,所以我尝试了:
uint32_t branch_bitmask = 0b0000_1111_0000_0000_0000_0000_0000_0000;
第一个下划线之后的所有内容都会出现“无效后缀”错误。
有没有下划线的替代方法,可以让我以一种更简洁的方式编写二进制文字:
uint32_t branch_bitmask = 0b00001111000000000000000000000000;
如果您始终拥有相同数量的位数(在您的示例中为 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 位。