在 C 中将全局变量设置为等于“0x0”有什么作用?
What does setting a global variable equal to "0x0" do in C?
我目前正在查看一些用 C 语言为微控制器编写的代码,我只是想弄清楚为什么某些变量设置为 0x0
和 0x1
。有人可以解释一下它的作用吗?
代码如下:
// Global variables
static bool volatile radio_busy;
int xx = 0x0;
int yy = 0x0;
int zz = 0x1;
bool flag = 1;
0x
只是 hexadecimal numbers(基数 16)的前缀,而不是默认的十进制数(基数 10)。
所以数组{0x0, 0x1, 0xf, 0x42}
由十进制值0
、1
、15
组成(因为数字是0-9
和a-f
等同于 10-15
) 和 66
(来自 4 * 16 + 2
)。
当人们打算对位模式而不是值进行操作时,人们通常会使用十六进制(因为一个十六进制数字完全包含在四位中)( a).
您给出的代码片段的意图并不明确 - 它具有令人讨厌的通用变量名称,这些名称似乎没有关于它们用途的有意义的指示,这是未经训练的程序员的标志,他们似乎认为大变量名不知何故占用更多 space :-)
(a) 例如,您可能希望执行以下操作来设置位 b5
(其中位的编号从最高位 b7
到内存映射位置的最低有效 b0
) 到 1
:
unsigned char *memLoc = 0xff00; // memory to modify.
unsigned char curr = *memLoc; // get current.
curr = curr | 0x20; // set ONLY b5, or with binary 00100000
*memLoc = curr // write it back.
我目前正在查看一些用 C 语言为微控制器编写的代码,我只是想弄清楚为什么某些变量设置为 0x0
和 0x1
。有人可以解释一下它的作用吗?
代码如下:
// Global variables
static bool volatile radio_busy;
int xx = 0x0;
int yy = 0x0;
int zz = 0x1;
bool flag = 1;
0x
只是 hexadecimal numbers(基数 16)的前缀,而不是默认的十进制数(基数 10)。
所以数组{0x0, 0x1, 0xf, 0x42}
由十进制值0
、1
、15
组成(因为数字是0-9
和a-f
等同于 10-15
) 和 66
(来自 4 * 16 + 2
)。
当人们打算对位模式而不是值进行操作时,人们通常会使用十六进制(因为一个十六进制数字完全包含在四位中)( a).
您给出的代码片段的意图并不明确 - 它具有令人讨厌的通用变量名称,这些名称似乎没有关于它们用途的有意义的指示,这是未经训练的程序员的标志,他们似乎认为大变量名不知何故占用更多 space :-)
(a) 例如,您可能希望执行以下操作来设置位 b5
(其中位的编号从最高位 b7
到内存映射位置的最低有效 b0
) 到 1
:
unsigned char *memLoc = 0xff00; // memory to modify.
unsigned char curr = *memLoc; // get current.
curr = curr | 0x20; // set ONLY b5, or with binary 00100000
*memLoc = curr // write it back.