有無unsigned 的區別
資料在計算機上儲存是2進製的 第一位是符號位 其餘是資料位
unsigned 是無符號的意思 沒有符號位 全都是資料位
比如unsigned int int 佔4位元組8位在記憶體中
0000 0000 0000 0000 0000 0000 0000 0000
int 也佔4位元組8位 這時候第一位為符號位
1 000 0000 0000 0000 0000 0000 0000 0000
綜上所屬
int 型別最大值為2^31(^是多少次方不是異或)2147483648
unsigned int 型別最大值為2^32 4294967296
short 型別2位元組16位
unsigned
0000 0000 0000 0000 2^16 65536
short
1 000 0000 0000 0000 32768
等等….
廢話不多說上例子
嵌入式節約記憶體#include
#include
int main()
比如1個位元組有8位 每乙個位都有2個狀態
所以控制燈的時候 1位元組 就可以控制8個燈泡的開關
//邏輯與
//這裡假設嵌入式裝置返回的資料位
//我們用邏輯與判斷 1&1 = 1 1&0 = 0 0&0 = 0
unsigned
char ch = 0x0a;//00001010
int arr = ;
//0x08 0000 1000
//0x04 0000 0100
//0x02 0000 0010
//0x01 0000 0001
//分別與0x0a 進行邏輯與判斷哪盞燈亮
for(int i = 0;i<4;i++)
else
}//取反 1變0 0變1
unsigned
char ch = 1;//0000 0001
//~1 1111 1110補碼顯示
// 1111 1110 反碼 1111 1101
//1111 1101原碼 1000 0010 -2
printf("%d",~1);//結果位-2
//~2 1111 1101
// 1111 1101反碼 1111 1100
//1111 1100 原碼 1000 0011
printf("%d",~2);//結果位-3
//|或運算 1|1=1 1|0=1 0|0=0
//2 0000 0010
//1 0000 0001
//2|1 0000 0011 :3
printf("%d",2|1);//3
//2 0000 0010
//-1 1000 0001原碼 這裡要轉化為補碼顯示
//1111 1110 -> 1111 1111 補碼
//2|-1 1111 1111 :-1
printf("%d",2|-1);//-1
//^異或 1^1 = 0 0^1 = 1 0^0 = 0
//2 0000 0010
//1 0000 0001
//2^1 0000 0011 :3
printf("%d",2^1);//3
//2 0000 0010
//-1 1000 0001原碼 這裡要轉化為補碼顯示
//1111 1110 -> 1111 1111 補碼
//2|-1 1111 1101
//1111 1101 反碼 1111 1100
//1111 1100 原碼 1000 0011 :-3
printf("%d",2^-1);//-3
//異或應用交換兩個數值
//比如 x=100 ;y=200; x = x+y; y = x-y; x = x-y;
int ch1= 10;
int ch2= 20;
printf("%d,%d\n",ch1,ch2);
ch1 = ch1^ch2;
ch2 = ch1^ch2;
ch1 = ch1^ch2;
printf("%d,%d\n",ch1,ch2);
近期看著000111看多了 建議小夥伴多出去春遊 不要一直擼**//綜合應用求餘數這裡有bug一直沒找出來
int st= 19; //求餘 3
//19 0001 0011
//~2 1111 1101
//19 & ~2 0001 0001
printf("%d\n",st - (st&(~2)));
關於 原碼 反碼 補碼 位運算
二進位制 原碼 最高位為符號位,0為正 1為負 正數的原碼 反碼 補碼 都是相同的 反碼 負數的反碼為原碼符號位不變 其它對應變化 1變0 0變1 補碼 等於 反碼 1 3 3 運算過程 3 10000000 00000000 00000000 00000011 原碼 11111111 111111...
運算(原碼 補碼 反碼)
表示不帶符號向右移動二進位制數,移動後前面統統補0 兩個箭頭表示帶符號移動,沒有 這種運算子,因為左移都是補零,沒有正負數的區別。如 12 的二進位制為 1111 1111 1111 1111 1111 1111 1111 0100 12 3 即帶符號右移3位,結果是 1111 1111 1111 ...
C語言原碼 反碼 補碼
原碼 反碼 補碼 計算機的基本儲存單元是位元組 byte 計算的的最小儲存單元是位 bit c語言當中的數被分為有符號數和無符號數 有符號數是 正數 負數 0 無符號數是 0 不帶符號的正數 對於無符號數和有符號數的0和正數,原碼 反碼 補碼一致 對於有符號數,最高位為符號位,0代表 1代表 對於有...