c語言的原碼補碼反碼 位運算

2021-07-30 13:56:44 字數 2471 閱讀 5730

有無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);

//綜合應用求餘數這裡有bug一直沒找出來

int st= 19; //求餘 3

//19 0001 0011

//~2 1111 1101

//19 & ~2 0001 0001

printf("%d\n",st - (st&(~2)));

近期看著000111看多了 建議小夥伴多出去春遊 不要一直擼**

關於 原碼 反碼 補碼 位運算

二進位制 原碼 最高位為符號位,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代表 對於有...