我使用了一些寄存器,数据表将所有内容转换为位索引。
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)
但那真的更糟,而且只限于一对小点心。有什么聪明又好的东西吗?
1条答案
按热度按时间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]位数,这样你就可以根据你指定的内容以任何方式对位进行分组。