⑴ 请问c语言中的标志位在什么时候用,什么时候用会出问题。谢谢
主要适用于位运算。
标志位操作:
Linux内核、wine、XFree86的代码中都常常能见到一些这样的标志位操作。
现在从Linux内核中的do_mount()函数中那些例子来记一下:
1949 if (flags & MS_NOEXEC)
1950 mnt_flags |= MNT_NOEXEC;
1956 flags &= ~(MS_NOSUID | MS_NOEXEC | MS_NODEV | MS_ACTIVE |
1957 MS_NOATIME | MS_NODIRATIME | MS_RELATIME| MS_KERNMOUNT |
1958 MS_STRICTATIME);
flags & MS_NOEXEC表示:
假设flags是二进制1111,MS_NOEXEC定义为十进制8,那么二进制就是0100,那么&操作执行完后,flags就是0100,不等于0,所以这行语句就是检查flags有没有设置标志位MS_NOEXEC。
检查一个标志位。
mnt_flags |= MNT_NOEXEC表示:
这里的意思和上面差不多,进行或操作后,mnt_flags的MNT_NOEXEC标志位置位。
设置一个标志位。
flags &= ~MS_NOEXEC表示:
上述语句主要是说的是 &~操作做了什么,下面我们分析看看。
这里还是假设flags是二进制1111,MS_NOEXEC定义为十进制8,二进制是0100,
MS_NOEXE进行非“~”操作后,就是二进制的1011,再把1011和flags的1111进行&操作,得到最终的结果──1011,那 么,我们对比可以看到,这里就是把flags中的MS_NOEXE标志位去掉,不管MS_NOEXE标志位在flags中是否被置位。
除去一个标志位。
小技巧:
flags = 0011
0011 << 3:
向左偏移3位,等同于乘以2的3次方,乘以8. 11000
flags = 0011
1100 >> 2:
向右偏移2位,等同于除以2的2次方。
那么下面这个呢?
(x+127)&~127
(x+127)&~127实际上是这个:
#define ROUND_SIZE(Size) ((Size) + ALIGN - 1) & ~(ALIGN - 1)
“ALIGN”字节对齐。
⑵ C语言中使用标志位是怎么回事
估计你问的是51单片机方面的C。说到标志位,可能要涉及到汇编。先不说远了,如果是单片机方面的程序,那么一个变量通常会按位来使用,比如做几个字节长度的乘除等运算,在写算法的时候通常会在几个变量循环左移右移时用作连接。说不太清楚,楼主看看C语言的位运算那一章,并要仔细弄懂数据类型以及各进制指间的关系。
⑶ C语言的标识符的定义是什么
在程序中使用的变量名、函数名、标号等统称为标识符。除库函数的函数名由系统定义外,其余都由用户自定义。C 规定,标识符只能是字母(A~Z,a~z)、数字(0~9)、下划线()组成的字符串,并且其第一个字符必须是字母或下划线。
在使用标识符时还必须注意以下几点:
(1)标准C不限制标识符的长度,但它受各种版本的C 语言编译系统限制,同时也受到具体机器的限制。例如在某版本C 中规定标识符前八位有效,当两个标识符前八位相同时,则被认为是同一个标识符。
(2)在标识符中,大小写是有区别的。例如BOOK和book 是两个不同的标识符。
(3)标识符虽然可由程序员随意定义,但标识符是用于标识某个量的符号。因此,命名应尽量有相应的意义,以便阅读理解,作到“顾名思义”。
⑷ c语言中如何定义一个bit
1、在c语言中定义bit型变量,可以使用位域来自定义。
位域的定义和位域变量的说明位域定义与结构定义相仿,其形式为:
struct 位域结构名
{ 位域列表 };
其中位域列表的形式为: 类型说明符 位域名:位域长度;
2、示例:通过位域来计算IEEE754浮点数标准中,单精度浮点数的最大值、最小值以及最小弱规范数。
#include<stdio.h>
typedefstructFP_SINGLE
{
unsigned__int32fraction:23;
unsigned__int32exp:8;
unsigned__int32sign:1;
}fp_single;
intmain()
{
floatx;
fp_single*fp_s=(fp_single*)&x;
fp_s->sign=0;
fp_s->exp=0xfe;
fp_s->fraction=0x7fffff;
printf("float最大数:%le ",(double)x);
fp_s->sign=0;
fp_s->exp=0x1;
fp_s->fraction=0x0;
printf("float最小数:%le ",(double)x);
fp_s->sign=0;
fp_s->exp=0;
fp_s->fraction=0x1;
printf("float最小弱规范数:%le ",(double)x);
return0;
}
⑸ c语言如何定义标识符
随意定义,字母数字下划线组成,不能数字开头。满足这个条件就可以。
⑹ C语言中如何巧用标志位
一般标志位用来跳转和判断的。
在嵌套循环内,有时不能直接跳转出来,可以设置一个标志位。
当条件满足时,自动跳转。
⑺ c语言 标志位是什么 有例子更好
我印象中的标志位就类似高低电频那样子,例如通过GPIO口控制LED灯的亮和灭,标志位为1亮,为0灭,我觉的就是这意思
⑻ C语言中标志位的用法
c语言中
*是二元运算符:乘号,用于将两个表达式的值相乘;
也是一元运算符:取值,用在指针表达式的左边,取指针指向的存储位置的值。