有没有办法在GCC二进制文字中进行分组?

cgyqldqp  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(112)

我使用了一些寄存器,数据表将所有内容转换为位索引。

register |= 0b01000010;

另一个选择当然是只使用十六进制格式

register |= 0x42;

尽管我已经用十六进制数做了一段时间,但我仍然发现二进制格式更适合这种位碰撞。我仍然把4和2x 1 e1f1x分解成它们的0100和0010模式。所以我认为二进制格式更直观。但二进制格式的 * 问题 * 是很难找到边界。使用十六进制格式,半字节很好地分开,所以有时你可以更安全地“索引”位。换句话说,在顶部,我不得不担心我没有添加或省略额外的0,最后以位7而不是6结束。
有没有开发出一种既能吃蛋糕又能吃蛋糕的技术/技巧?当你在C中有两个相邻的字符串常量时

"Hello " "World"

编译器足够聪明,可以将它们混合到一个文字中。如果有一种方法可以对这些二进制数做类似的事情,那就太好了,

0b0100 0010

我可以用宏做一些奇怪的事情

#define _(a, b) (((a) << 4) | (b))

然后就可以

_(0b0100,0b0010)

但那真的更糟,而且只限于一对小点心。有什么聪明又好的东西吗?

kiayqfof

kiayqfof1#

在C语言中,只能指定十进制、八进制和十六进制的整型常量,也不能将移位后的常量合并在一起(根据H2CO3在你的问题下面的注解)。如果它对你足够重要,你可以将你的常量指定为带引号的字符串常量,并调用一个函数(您自己编写的)来转换&返回它的整数值。在任何您想指定这样一个常量的地方,只需在其位置调用函数... int i = b("0100 1101 0011 1100"); ....或者使用C++....请参阅Binary literals?Can I use a binary literal in C or C++?
如果你编写自己的字符串常量转换器,你可以让它忽略非[0,1]位数,这样你就可以根据你指定的内容以任何方式对位进行分组。

相关问题