A. c语言标志位位常用的置0 和置1都好似什么意思
好似信号标志。例如 红灯,绿灯。
标志位 置1 用按位 或,置0用按 与。
例如:
unsigned short int flag;
假定 最高位 是 信号标志
置1 flag = flag | 0x8000;
置0 flag = flag & 0x7FFF;
0,1, 谁是红灯,谁是绿灯,由编程者决定。
B. C语言中标志位的用法
c语言中
*是二元运算符:乘号,用于将两个表达式的值相乘;
也是一元运算符:取值,用在指针表达式的左边,取指针指向的存储位置的值。
C. 请问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”字节对齐。
D. c语言 标志位是什么 有例子更好
我印象中的标志位就类似高低电频那样子,例如通过GPIO口控制LED灯的亮和灭,标志位为1亮,为0灭,我觉的就是这意思
E. C语言中使用标志位是怎么回事
估计你问的是51单片机方面的C。说到标志位,可能要涉及到汇编。先不说远了,如果是单片机方面的程序,那么一个变量通常会按位来使用,比如做几个字节长度的乘除等运算,在写算法的时候通常会在几个变量循环左移右移时用作连接。说不太清楚,楼主看看C语言的位运算那一章,并要仔细弄懂数据类型以及各进制指间的关系。