C++中是否支持直接写入二进制数值完成变量赋值?
能否直接在代码中写入二进制数值完成变量赋值?
首先纠正一个语法误区:你示例里写的char test = 00101011是错误写法,C/C++语法规则中,以0开头的整数字面量是八进制数,不是二进制,这么写得到的数值和你预期的43完全不符。
完全可以直接用二进制数值给变量赋值,不需要编写运行时执行的二进制转换函数,不存在你担心的额外运行时开销,具体实现分场景:
- 如果你使用的编译器支持C14及以上C标准,或是C23及以上C语言标准,语言原生支持二进制字面量,只需要在二进制数前加
0b(或大写0B)前缀即可,你需要的赋值写法如下:
char test = 0b00101011;
这种写法和你直接写char test = 43;、char test = 0x2B;(十六进制写法)完全等价,数值在编译阶段就会被编译器处理成对应的整数,运行时没有任何额外计算开销。
- 如果你的编译环境版本较老,不支持
0b前缀的二进制字面量,也不需要写自定义转换函数。最简便的零开销方案是直接写对应值的十六进制字面量:二进制和十六进制天然是4位对应1位的映射关系,00101011直接对应十六进制的0x2B,写char test = 0x2B;同样是编译期确定值的直接赋值,效率和写十进制数没有区别。如果一定要在代码里直观看到二进制位序列,也可以用宏在预处理阶段通过位运算计算数值,同样不会产生运行时开销。
注意:不要写运行时解析二进制字符串的转换函数,这类写法确实会产生额外运行时开销,但原生字面量、预处理计算、十六进制赋值都属于编译期就确定值的写法,不存在额外性能损耗。
内容的提问来源于stack exchange,提问作者Bfyuvf
相关产品推荐
相关产品推荐

