为什么 C 没有二进制文字?

2024-04-15

我经常希望我能在 c 中做这样的事情:

val1 &= 0b00001111; //clear high nibble
val2 |= 0b01000000; //set bit 7
val3 &= ~0b00010000; //clear bit 5

使用这种语法似乎是对 C 的一个非常有用的补充,没有我能想到的任何缺点,而且对于位操作相当常见的低级语言来说,这似乎是很自然的事情。

编辑:我看到了一些其他很棒的替代方案,但是当有更复杂的蒙版时它们都会崩溃。例如,如果reg是一个控制微控制器上 I/O 引脚的寄存器,我想同时将引脚 2、3 和 7 设置为高电平,我可以写入reg = 0x46;但我必须花 10 秒思考它(并且在一两天不看这些代码后每次阅读这些代码时我可能都必须再次花 10 秒)或者我可以写reg = (1 << 1) | (1 << 2) | (1 << 6);但我个人认为这比只写“reg = 0b01000110;”要清晰得多我同意它不能很好地扩展到 8 位或 16 位架构之外。并不是说我曾经需要制作 32 位掩码。


根据国际标准的基本原理 - 编程语言 C http://www.open-std.org/jtc1/sc22/wg14/www/C99RationaleV5.10.pdf§6.4.4.1整数常量

由于缺乏先例且实用性不足,添加二进制常量的提议被拒绝。

它不在标准 C 中,但 GCC 支持它作为扩展,前缀为0b or 0B:

 i = 0b101010;

See here http://gcc.gnu.org/onlinedocs/gcc/Binary-constants.html#Binary-constants详细信息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 C 没有二进制文字? 的相关文章

随机推荐