原码反码补码

    在对带符号数进行运算时,必然涉及数的符号问题,人们通常在一个数的前面用“+”表示正数,用“-”表示负数。而在数字系统中,符号和数值一样使用0和1来表示的,一般将数的最高位作为符号位,用0表示正,用1表示负,其格式为:

符号位

数值位

   把符号和数值一起编码表示的二进制数称为机器数或机器码,常用的机器码有原码,反码,补码三种。

一、原码

用原码表示带符号位二进制数时,符号位用0表示正,1表示负,数值位保持不变,原码表示法又称符号-数值表示法

整数原码和小数原码

    二进制整数原码就是在其最高位添加0或1,用于表示正负,小数也是一样。

例1:$X_1=+1101,X_2=-1101,$则$X_1$和$X_2$的原码为:$[X_1]_原=01101,[X_2]_原=11101$.

    根据定义:整数“0”的原码有两种形式,即00…0或10…0.

例2:$X_1=+0.1011,X_2=-0.1011$,则$X_1$和$X_2$的原码为:$[X_1]_原=0.1011,[X_2]_原=1.1011$

    根据定义:小数“0”的原码也有两种形式,即0.0…0或1.0…0.

二、反码

正数反码的数值位和真值相同;负数反码的数值位是真值按位取反

例1:$X_1=+0.1011,X_2=-0.1011$,则$X_1$和$X_2$的反码为:$[X_1]_反=0.1011,[X_2]_反=1.0100$

    根据定义:小数“0”的反码有两种表示形式,即0.0…0或1.0…0.

    根据定义:整数“0”的反码也有两种表示形式,即00…0或10…0.

三、补码

用补码表示带符号的二进制数时,符号位与原码、反码相同。正数补码的数值位与真值相同,负数补码的数值位为反码在最低为加1

例:$X_1=-0.1011,X_2=-1010$,则$X_1$和$X_2$的补码为:$[X_1]_补 = 1.0101,[X_2]_补 = 10110$

    根据定义:小数“0”的补码只有一种表示形式,即0.0…0.

    根据定义:整数“0”的补码也只有一种表示形式,即00…0.

    采用补码进行加、减运算时,其加、减运算均可通过加法是按,运算规则如下:

$[X_1+X_2]_补=[X_1]_补+[X_2]_补$

$[X_1-X_2]_补=[X_1]_补+[-X_2]_补$

    运算时,符号位和数值位一样参加运算,若符号位有进位产生,则应该将进位去掉才能得到正确结果。

例:若$X_1=-1001,X_2=+0011$,则采用补码求$X_1-X_2$的结果为:$[X_1-X_2]_补=[X_1]_补+[-X_2]_补=10111+11101=10100$,由于结果的符号位为1,表示是负数,故$X_1-X_2=-1100$

四、总结

(1)若$X>0$,则$[X]_原=[X]_反=[X]_补$.

(2)$[X+Y]_补 \xrightarrow[求反,最低位+1]{} X+Y$.

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏移动开发的那些事儿

数据结构?从HashMap的源码分析开始!

首先,先看下inflateTable方法,这个是初始化HashMap里面的线性表的空间:

581
来自专栏LIN_ZONE

Java:对double值进行四舍五入,保留两位小数的几种方法

比如:输入12345.6789,输出可以是12345.68也可以是12345.67。至于是否需要四舍五入,可以通过参数来决定(RoundingMode.UP/R...

783
来自专栏曾大稳的博客

LinkedHashMap和LruCache源码分析

LinkedHashMap是HashMap的子类,与HashMap有着同样的存储结构,但它加入了一个双向链表的头结点,将所有put到LinkedHashMap的...

683
来自专栏曾大稳的博客

HashMap源码分析

HashMap是一个很经典的键值对集合,从它的广泛应用程度和源码的学习角度上我们不得不去解析它。 我们先看一下HashMap的存储结构((图片均来源于网络)),...

522
来自专栏Java技术分享

HashMap源码理解

private static int roundUpToPowerOf2(int number) {     return number >= MAXIMUM_...

1909
来自专栏算法与数据结构

数据结构 重点详解

线性数据结构 线性表-顺序表 代码实现: #include <bits/stdc++.h> #define TRUE 1 #define FALSE 0...

2246
来自专栏和蔼的张星的图像处理专栏

142. O(1)时间检测2的幂次除以2统计1的位数n和n-1取且

用 O(1) 时间检测整数 n 是否是 2 的幂次。 样例 n=4,返回 true; n=5,返回 false.

663
来自专栏闻道于事

Java工具类之浮点精确计算

992
来自专栏赵俊的Java专栏

Java 中 byte 的取值范围为什么是 -128 到 +127

1172
来自专栏desperate633

[编程题] 调整队形代码

在幼儿园有n个小朋友排列为一个队伍,从左到右一个挨着一个编号为(0~n-1)。其中有一些是男生,有一些是女生,男生用'B'表示,女生用'G'表示。小朋友们都很顽...

702

扫码关注云+社区