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語言的位運算那一章,並要仔細弄懂數據類型以及各進制指間的關系。