我正在通过网站学习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/