原码反码补码

    在对带符号数进行运算时,必然涉及数的符号问题,人们通常在一个数的前面用“+”表示正数,用“-”表示负数。而在数字系统中,符号和数值一样使用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 条评论
登录 后参与评论

相关文章

来自专栏racaljk

Julia体验 语言基础

以前听说过Julia,不过那时候官网还处于时不时宕机状态,最近Julia发布了1.0 released版本到处都是它的资讯,官网良心自带简体中文,趁着热度我也来...

1982
来自专栏码匠的流水账

聊聊storm WindowTridentProcessor的FreshCollector

本文主要研究一下storm WindowTridentProcessor的FreshCollector

883
来自专栏包子铺里聊IT

那些年我们一起遍历过的树

这篇博文想和大家讨论一下tree的traversal有哪些方法。当然我们都很熟悉DFS(InOrder, PreOrder, PostOrder)和BFS,这...

2697
来自专栏Java帮帮-微信公众号-技术文章全总结

【编程题】Java编程题一(10道)

【编程题】Java编程题一(10道) 【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,...

4738
来自专栏刘笑江的专栏

learn-haskell

1273
来自专栏小樱的经验随笔

洛谷 P1598 垂直柱状图【字符串+模拟】

P1598 垂直柱状图 题目描述 写一个程序从输入文件中去读取四行大写字母(全都是大写的,每行不超过72个字符),然后用柱状图输出每个字符在输入文件中出现的次数...

3165
来自专栏前端迷

前端常见算法的JS实现

1033
来自专栏从零开始学 Web 前端

unsigned/signed int/char类型表示的数值范围

我们知道,在计算机内部数值一律使用补码存储。正数的补码与原码一致,负数的补码是符号位为1,其余位是该负数的绝对值按位取反后加1得到。

912
来自专栏web编程技术分享

【Java框架型项目从入门到装逼】第十节 simple-jdbc源码

41810
来自专栏吴伟祥

位运算 原

举个例子,6的二进制是110,11的二进制是1011,那么6 and 11的结果就是2,它是二进制对应位进行逻辑运算的结果(0表示False,1表示True,空...

1482

扫码关注云+社区

领取腾讯云代金券