原码,、反码、补码的计算

原创 2015年07月08日 00:40:22

在计算机内,有符号数有3种表示法:原码反码补码所有数据的运算都是采用补码进行的。

原码:原码就是符号位加上真值的绝对值,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。

+3 = 00000011
-3 = 10000011

反码:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。

+3 = 00000011
-3 = 11111100

补码:正数的补码与其原码相同;负数的补码是在其反码的末位加1,符号位不变。

+3 = 00000011
-3 = 11111101

看一道题:

public static void main(String[] args) {
    byte a = (byte) 129;
    byte b = (byte) 333;
    System.out.println("a= " + a);
    System.out.println("b= " + b);
}

结果是多少?

计算步骤如下:

1、由于所有数据的运算都是采用补码进行,所以要先将129转换成二进制:
00000000 00000000 00000000 10000001
这个是129的原码,也是反码和补码。

2、byte a = (byte) 129,因此129的前24位被截断,只剩:
10000001
注意:数据的运算都是采用<补码>进行!!!因此是对129的补码
00000000 00000000 00000000 10000001
进行截取操作,被截断之后 10000001 也是补码,需要将补码转换成原码。

3、10000001最高位是1,表示负数,数值位减1将其转换成反码:
10000000

4、然后数值位取反转换成原码:
11111111

5、11111111的最高位是1,表示负数,剩余7位表示数值,因此最终结果为:
11111111 = -127

同理,333的计算步骤也是一样:

1、由于所有数据的运算都是采用补码进行,所以要先将333转换成二进制:
00000000 00000000 00000001 01001101
这个是333的原码,也是反码和补码。

2、byte a = (byte) 333,因此333的前24位被截断,只剩:
01001101
注意:数据的运算都是采用<补码>进行!!!因此是对333的补码
00000000 00000000 00000001 01001101
进行截取操作,被截断之后 01001101 也是补码,需要将补码转换成原码。

3、01001101最高位是0,表示正数,正数的原码、反码和补码相同,因此
01001101也是补码, 01001101 = 77

版权声明:本文为博主原创文章,随便转载!注明出处即可! https://blog.csdn.net/liuweiballack/article/details/46797711

[计算机基础]补码、模与运算

补码这个概念从开始学的时候就一直记不住到底是怎么运算,看一次忘一次。备考时又拿出来看到了,这次就好好看看为什么会有补码、补码为什么叫补码、补码是干什么的。补色  在解决这些问题之前,我们先来谈谈补码的...
  • u013814701
  • u013814701
  • 2017-03-18 15:47:47
  • 992

二进制数的补码及运算(1)

本人研究不深,如有错误请不吝赐教!! 1.正数的补码表示 正数的补码 = 原码 负数的补码 = {原码符号位不变} + {数值位按位取反后+1}    or      = {原码符号位不变} + {数...
  • moon9999
  • moon9999
  • 2017-02-25 22:04:48
  • 3875

二进制中补码计算简单详实的讲解

首先说明一点这篇博文是基于网络资料 写作而来,尊重知识,广泛传播;可能你就需要它。但是转载请注明出处本博文参考链接 参考资料 参考资料本文说明一个基本的问题,补码的问题。负数在计算机中如何表示?举...
  • JQ_AK47
  • JQ_AK47
  • 2015-04-28 16:39:32
  • 13746

补码加减法

基本的规则就是: 加法: 整数: [A]补 + [B]补 = [A+B]补 (mod 2^(n+1)) 小数: [A]补 + [B]补 = [A+B]补 (mod 2)减法: 整数: [A...
  • u011240016
  • u011240016
  • 2016-09-04 17:07:49
  • 4336

补码 的运算

补码 的运算 补码的算术运算补码运算要注意的问题:1.补码运算时,其符号位与数值部分一起参加运算。  2.补码的符号位相加后,如果有进位出现,要把这个进位舍去(自然丢失)。    3.用补码运算,其运...
  • loverszhaokai
  • loverszhaokai
  • 2010-12-29 16:11:00
  • 7882

原码、反码、补码和移码其实很简单

最近在备战软考,复习到计算机组成原理的时候,看到书中关于原码、反码、补码和移码的定义如下(n是机器字长): 原码: 反码: 补码: ...
  • liushuijinger
  • liushuijinger
  • 2012-04-05 21:08:32
  • 211878

计算机原码、反码、补码详解

本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法....
  • u011080472
  • u011080472
  • 2016-04-29 12:33:27
  • 20412

17,原码,反码,补码

#include int main(int argc, const char * argv[]) {     /*      *计算机存储数据是存储补码,可以忽略正负号,便以计算(计算机...
  • dreamljs
  • dreamljs
  • 2015-11-17 11:40:26
  • 1111

-128 的 原码,反码,补码

1、如果用原码表示, 让符号位也参与计算, 显然对于减法来说, 结果是不正确的.这也就是为何计算机内部不使用原码表示一个数. 2、设八位数字从高位到低位分别为a7, a6, ..., a0。 那么它...
  • chuan_zhang_ak
  • chuan_zhang_ak
  • 2016-07-06 20:35:19
  • 6349

源码 反码 补码详解

一. 机器数和真值 在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念. 1、机器数 一个数在计算机中的二进制表示形式,  叫做这个数的机器数。机器数是带符号的,在计算机用一个...
  • cmd_cong
  • cmd_cong
  • 2016-12-20 23:05:04
  • 4719
收藏助手
不良信息举报
您举报文章:原码,、反码、补码的计算
举报原因:
原因补充:

(最多只允许输入30个字)