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專案 ...