我正在通过网站学习C++-Learncpp.com
我遇到了使我感到困惑的代码行,而且我不确定如何研究它。我回过头来寻找关于它是什么但找不到它的解释,我只想知道要查找什么或它叫什么,以便我可以更多地了解它。
这是代码:

    unsigned char option_viewed = 0x01;

它指的是位标志。我感到困惑的是0x01;部分。我假设它是十六进制的,但我不确定。
谢谢

最佳答案

在C++中,您可以用3个不同的底数表示整数文字:十进制(底数10),八进制(底数8)或十六进制(底数16)。编译器将以“正常”方式编写的数字(1、13、405,...)解释为以10为底。以0开头的数字(01、040、0800 ...)被解释为以8为底。以0x(0x1,0x01,0x800,...)开始

请注意,对于以16为底的数字,您可以根据需要在0x之后设置任意多个前导0。也就是说,0x1、0x01和0x00000001都仅为1。您可能想包含更多前导0的原因是为了使代码对齐以提高可读性。正如John Zwinck指出的那样,人们通常使用十六进制表示位标志,因为2的每个幂都可以用1、2、4或8中的一个数字写。所以你可能会看到类似

unsigned char red     = 0x01;  // 1 base 10,   00000001 base 2
unsigned char green   = 0x02;  // 2 base 10,   00000010 base 2
unsigned char blue    = 0x04;  // 4 base 10,   00000100 base 2
unsigned char yellow  = 0x08;  // 8 base 10,   00001000 base 2
unsigned char magenta = 0x10;  // 16 base 10,  00010000 base 2
unsigned char cyan    = 0x20;  // 32 base 10,  00100000 base 2
unsigned char white   = 0x40;  // 64 base 10,  01000000 base 2
unsigned char black   = 0x80;  // 128 base 10, 10000000 base 2

确实每个变量都存储一个数值,但是由于我们使用的是2的幂,因此每个值都由设置为1的不同位表示。由于类型是一个只有8位的无符号字符,因此您永远不会遇到大于255的功率或十六进制的0xFF,因此0x之后的两位数字就足够了。如果存储的是无符号的短型,则可能希望将其写为0x0001,它仍然仅为1,但是显然,它是16位整数而不是8位整数。

您可以了解有关numerical bases in C++ here的更多信息。

关于c++ - 二进制数和位标志 'x',我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52240637/

10-12 22:01
查看更多