C语言基础 — 原码、反码、补码 的转换(char、sugned char 、unsigned char)



原码、反码、补码

char 、signed char 、unsigned char

char				[-128 ~ 127] 
unsigned char		[0 ~ 255]    一定为正数

(1)无符号类型的数:原码,反码,补码是它本身. [正数和0]

(2)有符号类型的数:最高位0表示为正数,1表示为负数。
                                 负数 的反码 = 符号位不变,其他位按位取反
                                 负数 的补码 = 反码 + 1

(3)数据在内存中是以补码的形式存储,%d输出的时候,要求输出数据的原码形式。

例:

char a = 200; //补码:1100 1000 反码、原码正常取反后加1,则原码%d可输出—> -56

char a = 210; //补码:1101 0010 反码、原码正常取反后加1,则原码%d可输出—> -46

unsigned char a = 280 //补码:1 0001 1000 取低8bit
                                      //(补码反码、原码相同)则原码%d可输出—> 24

char = -200; //原码:1 1100 1000
                     //反码:1 0011 0111
                     //补码:1 0011 1000 (取低八位,为正数,补码、原码相同0011 1000)
                     //则原码%d可输出—>56

unsigned char = -1 //原码:1000 0001
                                 //反码:1111 1110
                                 //补码:1111 1111 (转换的反码、原码相同)—>255

总结:

char x / unsugned x
当 x>0 时:补码转原码后输出
当 x<0 时:先原码转补码,再转原码后输出

猜你喜欢

转载自blog.csdn.net/weixin_50019298/article/details/114328044
今日推荐