**C的位運算符**
1、二進制反碼或按位取反:~
~(10011010) = (01100101)。
假設val是一個unsigned char,~val不改名原來val的值。
2、位與:&
二進制運算符&通過對兩個操作數逐位進行比較產生一個新值。
(10010011)&(00111101)=(00010001)。
C中的一個組合的位與賦值運算符:&=。
3、位或:|
二進制運算符|通過對兩個操作數逐位進行比較產生一個新值。
(10010011)|(00111101)=(10111111)。
C中的一個組合的位或賦值運算符:|=。
4、位異或:^
二進制運算符^對兩個操作數逐位進行比較。對于每個位,如果操作數中對應位有一個為1,結果為1。
(100100011)^(00111101)=(10101110)。
C中有一個組合的位異或賦值運算符:^=。
5、掩碼:“位與”運算符通常跟掩碼一起使用。掩碼是某些位設為開(1)而某些位設置為關(0)的位組合。
flags = flags & MASK。
6、打開位。如,對于flags,想要打開它的第二位,可以使用flags = flags | (1<<2).
7、關閉位。如,對于flags,想要關閉它的第二位,可以使用flags = flags & (~(1<<2))。
8、轉置位。轉置一個位表示如果該位打開,則關閉該位;如果該位關閉,則打開該位。
如,對于flags,想要轉置它的第二位,可以使用flags ?= flags ^ (1<<2)。
9、移位運算符。左移:<<。右移:>>。左移運算符<<將其左側操作數的值的每位向左移動,移動的位數由其右側操作數指定。空出的位用0填充,并且丟棄移出左側操作數末端的位。右側位運算符>>將其左側操作數的值的每位向右移動,移動的位數由其右側操作數指定。丟棄移出左側操作數右端的位。
10、移位運算符:移位運算符能夠提供快捷、高效的對2的冪的乘法和除法。
number << n : number乘以2的n次冪。
number >> n : 如果number非負,則用number除以2的n次冪。
- 前言
- (四)回調函數
- (一)while(1)死循環與for(;;)死循環的區別
- (二)static關鍵字
- (三)函數
- (四)可變參數函數
- (五)setjmp和longjmp
- (六)指針
- (七)回調函數
- (八)字符串
- (九)動態內存分配
- (十)結構體
- (十一)深入理解指針
- (十二)命令行參數
- (十三)printf、fprintf、sprintf和snprintf函數
- (十四)const關鍵字詳解
- (十五)字符串輸入函數fgets、gets和scanf
- (十六)字符串輸出函數puts、fputs和printf
- (十七)字符/字符串輸出函數fputc、fputs、putc、putchar和puts
- (十八)字符/字符串輸入函數fgetc、fgets、getc、getchar和gets
- (十九)restrict關鍵詞
- (二十)scanf函數詳解
- (二一)內聯函數
- (二二)位操作
- (二三)errno變量
- (二四)內存分配