问题 问答题

[说明]

嵌入式C语言编程中常涉及位运算、宏定义的问题,以及大端方式(Big-endian)、小端方式(Little-endian)的访问问题。

 

嵌入式系统中常要求用户对变量或寄存器进行位操作。下面的两个函数分别为设置和清除变量a的第5位。请使用下面的宏定义BIT5按要求对变量a进行相应的处理。在函数set_bit5中,用位或赋值操作(|=)设置变量a的第5位,在函数clear_bit5中,用位与赋值操作(&=)清除变量a的第5位。

答案

参考答案:

①a|=BIT5

②a&=~BIT5

解析:

在32位机中,宏BIT5所定义的数值的二进制形式为00000000 00000000 00000000 00100000,~BIT5的二进制形式为11111111 11111111 11111111 11011111。在位运算中,任何值与1进行或操作之后结果都为1,与0进行或操作之后结果还是原数。同样,任何值与0进行与操作之后结果都为0,与1进行与操作之后结果还是原数,所以通过位的或操作可以将一个数值中的某位设置为1,通过与操作方式可以将一个数值中的某位设置为0。a|=BIT5将a的第5位置1,其他位不变,a&=~BIT5将a的第5位置0,其他位不变。

单项选择题
单项选择题