在单片机C语言中如何对变量的某一位进行操作或赋值。

如题所述

在C语言中,一般有两种方法来操作位,一种是使用C语言提供的位运算操作符,一种是使用位域。

1、使用位域

在C语言中定义位域的一般格式如下:

struct ä½åŸŸç»“构名 
  { ä½åŸŸåˆ—表 };

struct:在C语言中定义位域所使用的关键字是struct。

位域结构名:是一个C语言中的标识符,有字母、数字、下划线组成,而且第一个字符必须是字母或者下划线。

位域列表:组其中位域列表的形式为: 类型说明符 位域名:位域长度 

下面的示例代码,通过位域来计算IEEE754浮点数编码中单精度数的最大值 、最小值和最小弱规范数。

#include <stdio.h>
typedef struct FP_SINGLE
{
  unsigned __int32 fraction : 23;
  unsigned __int32 exp      : 8;
  unsigned __int32 sign     : 1;
} fp_single;
int main()
{
float x;
fp_single * fp_s = (fp_single *)&x;
fp_s->sign = 0;
fp_s->exp = 0xfe;
fp_s->fraction = 0x7fffff;
printf ("float æœ€å¤§æ•°ï¼š      %le\n",(double)x);
fp_s->sign = 0;
fp_s->exp = 0x1;
fp_s->fraction = 0x0;
printf ("float æœ€å°æ•°ï¼š      %le\n",(double)x);
fp_s->sign = 0;
fp_s->exp = 0;
fp_s->fraction = 0x1;
    printf ("float æœ€å°å¼±è§„范数:%le\n\n",(double)x);
return 0;
}

2、使用位运算符

 C语言中的位运算符有一个基本的常识,即只能操作整数,不能操作浮点数,因为浮点数是使用IEEE754编码的,使用位操作数没有任何意义。

C语言提供的位运算符列表:
按位与 å¦‚果两个相应的二进制位都为1,则该位的结果值为1,否则为0
按位或 ä¸¤ä¸ªç›¸åº”的二进制位中只要有一个为1,该位的结果值为1
^ æŒ‰ä½å¼‚或 è‹¥å‚加运算的两个二进制位值相同则为0,否则为1
~ å–反 ~是一元运算符,用来对一个二进制数按位取反,即将0变1,将1变0
<< å·¦ç§» ç”¨æ¥å°†ä¸€ä¸ªæ•°çš„各二进制位全部左移N位,右补0
>> å³ç§» å°†ä¸€ä¸ªæ•°çš„各二进制位右移N位,移到右端的低位被舍弃,对于无符号数,高位补0
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-12-15
头文件有定义的就可以直接赋值。没定义的就要定义一个变量,再用变量等于位地址。再给变量赋值。本回答被网友采纳
相似回答