如何在C/C++中以B前缀格式声明16位二进制值?
解决16位二进制值的声明问题
这问题我碰到过!其实B前缀是某些环境(比如Arduino)专门为8位二进制值设计的语法糖,它的底层实现通常只处理8位长度,所以超过8位就会触发报错。给你几个可行的解决办法:
使用标准C++的
0b前缀(推荐)
从C++11开始,语言标准正式支持用0b前缀声明任意长度的二进制整数,16位完全没问题,写法简洁还跨平台:int b = 0b1000000100001111;只要你的编译器支持C++11或更高版本,这个写法就能正常工作。
手动拼接8位值(适配依赖
B前缀的环境)
如果你的开发环境(比如旧版Arduino)只能用B前缀,可以把16位二进制拆成高8位和低8位,通过位运算拼接成完整的16位值:int b = (B10000001 << 8) | B00001111;这里把高8位左移8位,再和低8位做按位或运算,就能得到你想要的16位结果。
自定义宏实现长二进制声明
要是你特别偏好类似B的写法,可以自己定义一个宏来处理更长的二进制字符串:#include <cstdlib> // 需要包含这个头文件 #define B16(x) ((unsigned int)strtol(#x, NULL, 2))之后就能像这样声明16位二进制值了:
int b = B16(1000000100001111);这个宏会把传入的二进制数字符串转换成对应的整数,注意要确保字符串是合法的二进制格式哦。
内容的提问来源于stack exchange,提问作者APR SAW
相关产品推荐
相关产品推荐

