C语言学习之原码、反码、补码的查漏补缺

  • 原码:
  • 给程序员看的;
  • 反码:
  • 用来做原码和补码转换;
  • 补码:
  • 数据是以补码的形式在计算机中存储;
  • 三者关系:
  • 无符号数值和有符号正数:
  • 原码 == 反码 == 补码;
  • 有符号负数:
  • 反码 == 原码的数据位按位取反(即0变1、1变0),符号位不变;
  • 补码 == 反码 + 1;
  • 使用规则:
  • 存储时看数据的正负,取出时看类型有无符号;
  • 案例:
unsigned int a = 20;//int整型在内存中,占用4个字节(4 Byte == 32 bit)
//存储时:
//原码:0000 0000 0000 0000 0000 0000 0001 0100
//反码:0000 0000 0000 0000 0000 0000 0001 0100
//补码:0000 0000 0000 0000 0000 0000 0001 0100

//取出时:
//补码:0000 0000 0000 0000 0000 0000 0001 0100
//反码:0000 0000 0000 0000 0000 0000 0001 0100
//原码:0000 0000 0000 0000 0000 0000 0001 0100
printf("a == %d\n",a);//a == 20

signed int b = -20;
//存储时:
//原码:1000 0000 0000 0000 0000 0000 0001 0100
//反码:1111 1111 1111 1111 1111 1111 1110 1011
//补码:1111 1111 1111 1111 1111 1111 1110 1100

//取出时:
//补码:1111 1111 1111 1111 1111 1111 1110 1100
//反码:1111 1111 1111 1111 1111 1111 1110 1011
//原码:1000 0000 0000 0000 0000 0000 0001 0100
printf("b == %d\n",b);//b == -20

unsigned char c = -20;//char字符型在内存中,占用1个字节(1 Byte == 8 bit)
//存储时:
//原码:1001 0100
//反码:1110 1011
//补码:1110 1100

//取出时:
//补码:1110 1100
//反码:1110 1100
//原码:1110 1100
printf("c == %d\n",c);//c == 236

signed char d = 129;
//存储时:
//原码:1000 0001
//反码:1000 0001
//补码:1000 0001

//取出时:
//补码:1000 0001
//反码:1000 0000
//原码:1111 1111
printf("d == %d\n",d);//d == -127



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值