10.原碼 反碼 補碼


+7的原碼:0000 0111 

-7的原碼:1000 0111   第一位0代表正數,1代表負數,第一位為符號位

 

+7的反碼:0000 0111 正數反碼和原碼一樣

-7的反碼:1111 1000  符號位不變,其他取反

 

+7的補碼:0000 0111 正數補碼和原碼一樣

-7的補碼:1111 1001 十六進制為:F9 負數的補碼原碼取反再加一


 

舉個例子:

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 
 4 void main()
 5 {
 6     char ch = -17;
 7     //0001 0001 +17原碼 
 8     //1001 0001  -17原碼
 9     //1110 1110 反碼
10     //1110 1111 -17補碼  十六進制:ef
11     printf("%p", &ch);
12 
13     getchar();
14 
15 }

查看內存變量:  

規律:

正數:原碼,反碼,補碼,正數都是一樣的

負數:原碼取反(不包括符號位)+1 = 補碼


 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 
 4 void main()
 5 {
 6     int num = -1;
 7     //0000 0000 0000 0000 0000 0000 0000 0001  +1原碼
 8     //1000 0000 0000 0000 0000 0000 0000 0001  -1原碼
 9     //1111 1111 1111 1111 1111 1111 1111 1110  -1反碼
10     //1111 1111 1111 1111 1111 1111 1111 1111  -1補碼
11     printf("%u", num);
12 
13     getchar();

結果:


補碼的好處:

+7補碼:0000 0111  補碼為:0000 0111

-1補碼:1000 0001   補碼為: 1111 1111

         補碼和為: 0000 0110 換成原碼就是+6            

 

+7補碼:0000 0111 

-9補碼:  1111 0111

和為:      1111  1110

反碼為:   1000 0001 

再加1 :    1000 0010 代表的數為-2

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM