我是靠谱客的博主 现实西装,最近开发中收集的这篇文章主要介绍Carry原码、反码、补码前言原码、反码、补码,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

  • 前言
  • 原码、反码、补码
    • 一、一些基础概念
      • 1.机器数
      • 2.真值
      • 3.十进制转换二进制
    • 二、原码
    • 三、反码
    • 四、补码
    • 练习题
      • 1.转换为加法
      • 2.转化为原码
      • 3.转换为反码
      • 4.转换为补码
      • 5.计算
      • 6.转换为反码
      • 7.转换为原码
      • 8.转换为十进制
    • 总结

前言

原反补是为负数而设计的,所以可以理解为正数没有反码补码,就是用原码运算。只是为了和负数保持概念一致,所以正数的原码 = 反码 = 补码。

只考虑正数和负数的情况下,加法运算有三种(正数和正数,正数和负数,负数和负数),

用原码可以正确算出正数和正数,但是算正数和负数就会出错。

用反码可以正确算出正数和正数、正数和负数,但是算负数和负数就会出错。

用补码可以正确算出加法的三种情况。

原码、反码、补码

一、一些基础概念

1.机器数

由于计算机的硬件决定,任何存储于计算机中的数据,其本质都是以二进制码存储,在计算机用一个数的最高位存放符号, 正数为0, 负数为1(肯定有朋友不理解,在计算机里1不是为真吗,在这里负数为什么为1呢?因为不考虑负数之前的时候,转换为二进制一个数的最高位就是0,1属于是后来添加的),举例:十进制中的数(5),转换为机器数就是00000101,那么它的相反数即十进制中的数(-5),转换为机器数是10000101。

2.真值

因为带有符号位,所以机器数的形式值不等于其真值,以机器数1000 0011为例,其真正表示的值为-3,而形式值为131。将带符号的机器数的真正表示的值称为机器数的真值。

3.十进制转换二进制

用2整除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为小于1时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。

二、原码

原码表示法在数值前面增加了一位符号位(即最高位为符号位),原码不能直接参加运算,可能会出错,举个例子:十进制中1+(-1)=0,而在用原码运算的话0001+1001=1010,换算成十进制为-2,答案不一样这不显然错了吗。

问题就出现在了一个数加上它的相反数不等于0,那么就有了反码来解决这点。负数和正数互为相反数,所以干脆用一个正数按位取反来表示负数。

三、反码

反码就是一个数,它的原码除符号位外,按位取反。

举例-5的原码是10000101,反码是11111010,十进制中1+(-1)=0,现在用反码运算的话就是:

0001+1001->0001+1110=1111,反码1111转换为原码就是1000即0。但是当计算(-1)+(-1),又出现问题了,十进制中(-1)+(-1)=-2,用反码运算的话是:

1001+1001->1110+1110=1100,反码1100转换为原码就是1011即-3。

计算(-2)+(-3),十进制是-5,用反码运算的话是:

1010+1011->1101+1100=1001,反码1001转换为原码就是1110即-6。

经过多次运算我们可以发现了一个规律:用反码对两个负数进行运算真实值和所得值相差为1。反码并不能完全的解决问题,因此就有了补码。

四、补码

负数的补码等于反码+1

举例-5的原码是10000101,反码是11111010,补码是11111011。

现在用补码计算(-2)+(-3):

1010+1011->1101+1100->1110+1101=1011,补码1011的反码是1010,反码1010的原码是1101即-5,到此问题完美解决。

练习题

用补码运算计算9-12
注:(计算时注意正数的补码就是原码)

1.转换为加法

9+(-12)

2.转化为原码

00001001+10001100

3.转换为反码

00001001+11110011

4.转换为补码

00001001+11110100

5.计算

11111101

6.转换为反码

11111100

7.转换为原码

10000011

8.转换为十进制

-3

总结

原码、反码、补码的引入是为了解决做减法的问题。在原码、反码表示法中,我们把减法化为加法的思维是减去一个数等于加上这个数的相反数,结果发现引入符号位,却因为符号位造成了各种意想不到的问题,而补码就是来解决这个问题的。

最后

以上就是现实西装为你收集整理的Carry原码、反码、补码前言原码、反码、补码的全部内容,希望文章能够帮你解决Carry原码、反码、补码前言原码、反码、补码所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(58)

评论列表共有 0 条评论

立即
投稿
返回
顶部