unsigned char 無符號整形 減法運算


對於一個字節來說:

unsigned char :     0  ~  255              0000 0000  ~ 1111 1111

              char :-128  ~  127              -128  ~  -1     1000 0000  ~ 1111 1111                     0  ~  127     0000 0000  ~   0111 1111

             (-128 的補碼是1000 0000,它沒有對應的原碼、反碼,其推導是根據 -128 + 127 = -1,即1000 0000 + 0111 1111 = 1111 1111)

 

計算機CPU只有加法邏輯運算器,對於減法運算,是使用兩個數的補碼進行加法運算。

 1 #include "stdafx.h"
 2 #include <stdio.h>
 3 
 4 void print_2(unsigned char val2)
 5 {
 6     unsigned char *p = (unsigned char*)&val2; //從低位到高位,低端字節計算機
 7     
 8     for (int i = 7; i >= 0; i--)
 9     {
10         if(val2 & (1 << i))
11             printf("1");
12         else
13             printf("0");
14     }
15     printf(" ");
16 
17 }
18 
19 int main(int argc, char **argv)
20 {    
21     unsigned char a = 1;      //補碼:0000 0001
22     unsigned char b = 2;      //補碼:0000 0010
23     unsigned char c = a - b;  //補碼:0000 0001 + (-2)1111 1110 = (-1)1111 1111
24     
25     printf("%02x,%02x,%02x\n", a, b, c);
26     printf("%d,%d,%d\n", a, b, c);
27     print_2(a);
28     print_2(b);
29     print_2(c);
30 
31     char d = a - b;
32     printf("\n%d\n", d);
33 
34     getchar();
35 }

 

內存中的數據結果是 1111 1111 ,如果按照unsigned char 解釋即為255,按照char 解釋則為 -1。

計算機補碼概念剖析


免責聲明!

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



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