我需要使用二进制数.
我试着写:
const x = 00010000;
Run Code Online (Sandbox Code Playgroud)
但它没有用.
我知道我可以使用具有相同值的十六进制数字00010000,但我想知道C++中是否存在二进制数的类型,如果没有,是否有另一种解决方案可以解决我的问题?
在代码中,我有时会看到人们以十六进制格式指定常量,如下所示:
const int has_nukes = 0x0001;
const int has_bio_weapons = 0x0002;
const int has_chem_weapons = 0x0004;
// ...
int arsenal = has_nukes | has_bio_weapons | has_chem_weapons; // all of them
if(arsenal &= has_bio_weapons){
std::cout << "BIO!!"
}
Run Code Online (Sandbox Code Playgroud)
但是我在这里使用十六进制格式没有意义.有没有办法直接用二进制文件做?像这样的东西:
const int has_nukes = 0b00000000000000000000000000000001;
const int has_bio_weapons = 0b00000000000000000000000000000010;
const int has_chem_weapons = 0b00000000000000000000000000000100;
// ...
Run Code Online (Sandbox Code Playgroud)
我知道C/C++编译器不会编译它,但必须有一个解决方法吗?是否有可能在其他语言如Java?
C++ 14似乎即将到来,编译器已经在尝试实现这个新版本的核心功能.我正在研究GCC对这些核心功能的支持,并注意到二进制文字部分:GCC实现了它们,但似乎在GNU二进制文字和C++ 14二进制文字之间有所区别.以下是两者的相应参考:
我试图找到他们两个之间的一些差异,因为GCC似乎有所作为,但找不到任何东西.你们中有谁知道更多可能的不兼容性吗?
我正在尝试更改一个字节的4个中间位以对应另一个字节的高半字节:
假设我们从:
In = 0bABCDEFGH
Out = 0bXXXXXXXX // Some random byte
Run Code Online (Sandbox Code Playgroud)
我想要:
Out = 0bXXABCDXX
Run Code Online (Sandbox Code Playgroud)
留下任何其他位置Out的极端不变.
我怎样才能做到这一点?
注意: 'X'表示任何位,0或1,只是为了区分来自输入的内容.
我得:
(0b00111100 & (IN>>2)) = 0b00ABCD00
Run Code Online (Sandbox Code Playgroud)
,过滤高半字节并使其居中但是接着是什么?我怎么能把它移动到Out?
我是C语言的新手,我正试图从一个无符号字符中获取4个最低有效位。到目前为止,我还不知道如何获得它们。我将不胜感激
每个人都知道,如果你声明一个8位的值,你可以做类似的事情
int a = B10001110;
Run Code Online (Sandbox Code Playgroud)
就像那个vut我不知道怎么用16位声明它,我做了类似的事情
int b = B1000000100001111;
Run Code Online (Sandbox Code Playgroud)
但这给了我错误.我可以做些什么吗?我想要这个16位格式声明.