c - 在 C 中将全局变量设置为等于 "0x0"有什么作用?

标签 c microcontroller

我目前正在查看一些用 C 语言为微 Controller 编写的代码,我只是想弄清楚为什么某些变量设置为等于 0x00x1。谁能解释一下这是做什么的?

代码如下:

// 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)

您提供的代码片段的意图并不明确 - 它具有令人讨厌的通用变量名称,这些名称似乎没有有意义地指示它们的用途,这是未经训练的程序员似乎认为大变量名会以某种方式占用更多空间:-)


(a) 例如,您可能希望执行以下操作来设置位 b5(其中位从最高有效位 b7 开始编号到 1 的内存映射位置的最低有效 b0:

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 - 在 C 中将全局变量设置为等于 "0x0"有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58478807/

相关文章:

c - C 中带有 malloc 的子字符串函数返回不正确的值

java - float 到 string 转换错误

C fopen模式参数

c - 这些三维数组在 C 中合法吗?

c - 切换 TI MSP430 的 LED

c - 其他声音然后是原始 .wav 文件

一个预处理器函数可以用来定义多个预处理器宏吗?

c malloc 问题

c - LPC1769 微 Controller 中批量传输的 USB 供应商特定类

c - 设置 ADC 采样率。读取数据表时遇到问题