原码,反码,补码,有符号数,无符号数 之间的关系【超全总结】



这几个东西向来很绕。这里不叙述由来和原理,而是直接总结 原、反、补码的正逆转化方法有无符号数之间的辨析



1. 原码、反码、补码 正逆转化方法


1.0 前言

"有符号数"才有原码、反码和补码!!!
"有符号数"才有原码、反码和补码!!!
"有符号数"才有原码、反码和补码!!!


1.1 正转方法

1.1.1 讲解

正数负数
原码(原码)(原码)
反码等于原码原码除符号位外的位取反
补码等于原码反码+1 (即等于原码除符号位外取反,然后+1)

1.1.2 举例

正数负数
原码0110 0011 - - - (原码)1110 0011 - - - - - - - - - - - - - – (原码)
反码0110 0011(等于原码)1001 1100(原码除符号位外的位取反
补码0110 0011(等于原码)1001 1101 - - - - - - - - - - - – (反码+1)

1.1.3 注

  1. 有符号数的最高位为符号位,其余位为有符号数的值;无符号数所有位都用来表示无符号数的值
  2. 还有另一种计算补码的方法:原码符号位不变, 数值位从右边数第一个1及其右边的0保持不变,左边按位取反。这种方法如何反过来计算我就暂时不推了。


1.2 反转方法

1.1.1 讲解

那么反过来转化也是一样的道理

正数负数
补码(补码)(补码)
反码等于补码补码-1
原码等于补码反码除符号位外取反(即等于补码-1,然后除符号位外取反

1.1.2 栗子
在这里插入图片描述

1.1.3 注

  1. 这里举例为了方便,使用了8位(又称8-bit、1字节)的数。
  2. 通常的int类型为32位(4字节)或64位(8字节),有时也会出现16位(2字节)。
  3. 再次提示:以上讨论的是“有符号数”为正、负的情况。"无符号数"没有原码、反码和补码的概念!



2. 有符号数、无符号数【难点辨析】

2.1 辨析

有符号数无符号数
能表示正数和负数仅表示正数
最高位是符号位(符号位:1为负数,0为正数)。其余位按照2进制计算该数的绝对值大小所有位都按照2进制计算大小
在机器中(即内存中)用补码表示在机器中(即内存中)直接按2进制存储,不用进行任何变换


2.2 实例

举个栗子 —— 以一个内存中8位的机器数为例:

1100 0101

有符号数无符号数
区别视作补码 (翻译成原码,并且除去符号位后,剩下的才可视为二进制数)视作一个二进制数
翻译为反码1100 0100 - - - - - - - - - - -(补码-1)(不适用)
翻译为原码1011 1011(反码符号位外取反)(不适用)
...
最终结果-59187



3. 参考资料

  1. 二进制补码怎么计算的

  2. int是多少位

  3. 什么是有符号数和无符号数

  4. 什么是取反

  5. 高人指点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值