關於位操作的知識點

2021-07-04 20:32:28 字數 2089 閱讀 2504

1.1位操作與邏輯操作

位操作不同於邏輯操作,邏輯操作是一種整體的操作,而位操作是針對內部資料補

碼的操作。邏輯操作的世界裡,只有真與假(零和非零),而位操作的世界裡按位論真

假(1 和 0)。

1.2二進位制列印

**如下:

void itobs(int data)

putchar(10);

}

1.3位操作有三種:按位&,按位|。按位取~(反)和按位異或^

按位&:如圖

參考用途:

相同者為零,相異者或。在某些位保持不變的情況下,將其餘位取反。即不同為0,相同為1,0 和1除外。

按位|:如圖

參考用途:

在某些位保持不變的情況下,將其餘位置 1,即不同為1,1相同為1,。

按位~:取反就可以

按位異或^如圖:

參考用途:

相同者為零,相異者或。在某些位保持不變的情況下,將其餘位取反。相同為0.不同為1.

左移和右移:左移規則:是運算元各位左移,低位補0,高位溢位,右移:使運算元右移,規則 :使運算元的各位右移,移出的低位捨棄;高位:對無符號數和有符號中的正數補 0;符號數中的負數,取決於所使用的系統:補 0 的稱為「邏輯右移」,補 1 的稱為「算術右移」。

1.4掩碼的引用和功能

開啟位(位置 1)flag |= mask;

**例項:

int main(void)

{ // int leds = 0x0; //第5位和第6位 置1 其它位保持不變

// int mask = (1<<5) | (1<<6);

// //0010 0000

// //0100 0000

// leds = leds|mask;

// itobs(leds);

關閉位(位置 0)flag &= ~mask;

**這裡寫**片// int leds = 0xff; //第5位和第6位 清零 其它位保持不變

// int mask = (1<<5) | (1<<6);

// //0010 0000

// //0100 0000

// //0110 0000

// //1001 1111

// leds = leds&(~mask);

// itobs(leds);(位反轉)flag ^= int leds = 0xaa; //第5位和第6位 取反 其它位保持不變

// int mask = (1<<5) | (1<<6);

// //0010 0000

// //0100 0000

// //0110 0000

// //1001 1111

// itobs(leds);

// leds = leds^(mask);

// itobs(leds);一位的值if((flag&mask)==mask)

**如下:

// int leds = 0x7f; //1000 0000

// int mask = 1<<7;

// if(leds & mask)

// printf(「最高位是 1\n」);

// else

// printf(「最高位是 0\n」);typedefine的區別)

題外話::

#define

發生在預處理階段

路徑用45度角

\續行符

typedef 發生在編譯階段

str(x)#x

//將x引數化為字串

位運算 知識點

1.按位與 位運算實質是將參與運算的數字轉換為二進位制,而後逐位對應進行運算。按位與運算為 兩位全為1,結果為1,即1 1 1,1 0 0,0 1 0,0 0 0。例如51 5 00110011 00000101 00000001 51 5 1 特殊用法 1 與0相與可清零。2 與1相與可保留原值,...

關於TCP IP知識點

資料在傳送時是資料從應用層至物理層的乙個打包的過程,接收時是資料從物理層至應用層的乙個解包的過程,從功能角度可分為三組,1 2層解決網路通道問題,3 4層解決傳輸問題,5 6 7層處 理對應用程序的訪問。從控制角度可分為二組,第1 2 3層是通訊子網層,第4 5 6 7層是主機控制層。a 類 1.0...

關於springboot知識點

談到springboot知識時,大多數資料說的是免搭建或者說是免配置,構建乙個spring boot專案非常簡單。在這給乙個非常詳細的鏈結位址,說的非常明白 1.spring suit tool sts 開發工具下搭建spring boot專案 2.idea開發工具下搭建spring boot專案 ...