天天看點

記憶體中原碼,反碼,補碼,檢視數值範圍,&,或,異或,取反,左右移位操作



1.補碼,計算機二進制在記憶體中如何顯示的就是補碼

記憶體中原碼,反碼,補碼,檢視數值範圍,&,或,異或,取反,左右移位操作

2.檢視每種資料類型的範圍

記憶體中原碼,反碼,補碼,檢視數值範圍,&,或,異或,取反,左右移位操作

如果想輸出無符号整型,使用的是uint_max可以得到長度。

3.原碼,反碼,補碼

負數:(以-1為例)

原碼: 1000 0000 0000 0000 

00000000 0000 0001 -1的原碼

反碼: 1111 1111 1111 1111 

11111111 1111 1110 -1的反碼(符号位不變,其它位取反)

補碼: 1111 1111 1111 1111 

11111111 1111 1111 -1的補碼(符号位不變,反碼基礎上加1)

4、操作符

參數1

參數2

求&的結果

1

比如:(7&3)=3

與可以清除某些位數

|:或操作

求|的結果

^異或

求^的結果

案例:

記憶體中原碼,反碼,補碼,檢視數值範圍,&,或,異或,取反,左右移位操作

~取反操作符

1  

取反得 

unsigned char ch1 = 1;    

//0000 0001  1

unsigned char ch2= ~ch1;  

//1111 1110 254

<<

左移,值變成原來的2倍

>>

右移 

值變成原來的1/2

左移位效果

記憶體中原碼,反碼,補碼,檢視數值範圍,&,或,異或,取反,左右移位操作

在上面的基礎上進行右移位的效果如下:

記憶體中原碼,反碼,補碼,檢視數值範圍,&,或,異或,取反,左右移位操作

5、列印二進制檔案

#define _crt_secure_no_warnings

#include<stdio.h>

#include<stdlib.h>

void main1()

{

intnum;

scanf("%d",&num);

printf("num=%d,&num=%p\n",num,&num);

int  data = 1 << 31;//建構一個相與的資料

for(int i = 1; i <= 32; i++)

inttemp = num&data;//求出首位相與

if(temp == 0)

putchar('0');

}

else

putchar('1');

num<<= 1;

if(i % 4 == 0)

printf("");

system("pause");

void main()

printf("num=%d,&num=%p\n",num, &num);

intdata = 1 << 31;//建構一個相與的資料

if(num < 0)

num= ~num + 1;//求原碼  

num= num | data;//設定符号位