首页 > 代码库 > unsigned char 无符号整形 减法运算

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         else13             printf("0");14     }15     printf(" ");16 17 }18 19 int main(int argc, char **argv)20 {    21     unsigned char a = 1;      //补码:0000 000122     unsigned char b = 2;      //补码:0000 001023     unsigned char c = a - b;  //补码:0000 0001 + (-2)1111 1110 = (-1)1111 111124     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。

unsigned char 无符号整形 减法运算