当一个数字写为 0x00...x 意味着什么

Joh*_*Doe -1 c bitwise-operators

假设我试图在 C 中创建一个用于按位运算的掩码,例如

uint32_t Mask = 0x00000003; 
Run Code Online (Sandbox Code Playgroud)

x 是什么意思?我看到很多用 0x 格式写的数字,我不明白为什么,也找不到对我来说真正有意义的解释,也许我没有寻找正确的东西。

pm1*_*100 5

这意味着数字以十六进制表示,以 16 为基数,而不是以十进制表示,以 10 为基数。对于您的示例,这没有区别

uint32_t Mask = 0x00000003;
Run Code Online (Sandbox Code Playgroud)

因为 3 在两个基数中都是 3

uint32_t Mask = 0x00000010;  // '16' in human talk
Run Code Online (Sandbox Code Playgroud)

uint32_t Mask = 10; // '10' in human talk
Run Code Online (Sandbox Code Playgroud)

注意

uint32_t Mask = 00000010; 
Run Code Online (Sandbox Code Playgroud)

在人类语言中实际上是“8”,因为在 C 和 C++ 中,以零开头的数字文字是八进制的(基数为 8)

你会看见

uint32_t Mask = 0x00000003;
Run Code Online (Sandbox Code Playgroud)

当表达值是一组位标志而不是数字的内容时(请参见名称“掩码”),因为十六进制很好地映射到位序列。你可能会看到

uint32_t Mask1 = 0x00000003;
uint32_t Mask2 = 0x00000010;
uint32_t Mask3 = 0x000000C2;
Run Code Online (Sandbox Code Playgroud)

第一个不需要 0x 但它看起来更干净

  • `00000010` 在人类语言中是 *8* - 前导 0 表示八进制表示法。 (3认同)