负数的二进制表示方法

一:表示法:

1、正数5的表示法

假设有一个 int 类型的数,值为5,那么,我们知道它在计算机中表示为:

00000000 00000000 00000000 00000101

5转换成二制是101,不过int类型的数占用4字节(32位),所以前面填了一堆0。

2、负数-5的表示法

现在想知道,-5在计算机中如何表示?在计算机中,负数以原码的补码形式表达。

二、概念:

1、原码:一个正数,按照绝对值大小转换成的二进制数;一个负数按照绝对值大小转换成的二进制数,然后最高位补1,称为原码。

比如 00000000 00000000 00000000 00000101 是 5的 原码。

10000000 00000000 00000000 00000101 是 -5的 原码。

备注:

比如byte类型,用2^8来表示无符号整数的话,是0 - 255了;如果有符号, 最高位表示符号,0为正,1为负,那么,正常的理解就是-127 至 +127了.这就是原码了,值得一提的是,原码的弱点,有2个0,即+0和-0(10000000和00000000);还有就是,进行异号相加或同号相减时,比较笨蛋,先要判断2个数的绝对值大小,然后进行加减操作,最后运算结果的符号还要与大的符号相同;于是,反码产生了。

2、反码:正数的反码与原码相同,负数的反码为对该数的原码除符号位外各位取反[每一位取反(除符号位)]。

取反操作指:原为1,得0;原为0,得1。(1变0; 0变1)

比如:正数00000000 00000000 00000000 00000101  的反码还是00000000 00000000 00000000 00000101

负数10000000 00000000 00000000 00000101  的反码则是11111111 11111111 11111111 11111010。

反码是相互的,所以也可称:10000000 00000000 00000000 00000101 和 [**************]1 11111111 11111010互为反码。

备注:还是有+0和-0,没过多久,反码就成为了过滤产物,也就是,后来补码出现了。

3、补码:正数的补码与原码相同,负数的补码为对该数的原码除符号位外各位取反,然后在最后一位加1.

比如:10000000 00000000 00000000 00000101 的补码是:11111111 [**************]1 11111010。

那么,补码为:

11111111 11111111 11111111 11111010 + 1 = 11111111 [**************]1 11111011

备注:1、从补码求原码的方法跟原码求补码是一样的,也可以通过完全逆运算来做,先减一,再取反。

2、补码却规定0没有正负之分

所以,-5 在计算机中表达为:11111111 11111111 [**************]1。转换为十六进制:0xFFFFFFFB。

三、再举一例

我们来看整数-1在计算机中如何表示。假设这也是一个int类型,那么:

1、先取-1的原码:10000000 00000000 00000000 00000001

2、得反码:    11111111 11111111 11111111 11111110(除符号位按位取反)

3、得补码:    11111111 11111111 11111111 11111111

可见,-1在计算机里用二进制表达就是全1。16进制为:0xFFFFFF

四、主要知识点:

正数的反码和补码都与原码相同。

负数的反码为对该数的原码除符号位外各位取反。

负数的补码为对该数的原码除符号位外各位取反,然后在最后一位加1

源码:优点在于换算简单 缺点在于两个零 加减法需要独立运算

反码:有点在于表示清晰 缺点在于两个零 加减法同样需要独立运算

补码:优点在于一个零 范围大  减法可以转为加法 缺点在于理解困难

下面是书上原文:

原码表示法规定:用符号位和数值表示带符号数,正数的符号位用“0”表示,负数的符号位用“1”表示,数值部分用二进制形式表示。

反码表示法规定:正数的反码与原码相同,负数的反码为对该数的原码除符号位外各位取反。

补码表示法规定:正数的补码与原码相同,负数的补码为对该数的原码除符号位外各位取反,然后在最后一位加1.

正零和负零的补码相同,[+0]补=[-0]补=0000 0000B

五、特殊情况-128

10000000,那么,它的原码是什么呢?从补码求原码的方法跟原码求补码是一样的。先保留符号位其它求反: 1111 1111, 再加1,11000 0000, 超过了8位了。对,用8位数的原码在这里已经无法表示了。

那么,回到原码处, 它的原码也是 1000 0000(超出的自动丢失),1000 0000 在原码表示什么呢? -0,但补码却规定0没有正负之分。

转换一下思路,看看计算机里,是怎么运算的:

对于负数,先取绝对值,然后求反,加一

-128 -> 128 -> 1000 0000-> 0111 1111 -> 1000 0000

现在明确了吧

所以, 8位有符号的整数取值范围的补码表示

1000 0000 到 0000 0000, 再到 0111 1111

即 -128 到 0, 再到 127

最终 -128 ~ +127

永远记住:程序里的加减法对二进制是永远有效的。但是并不一定适合于真实世界。

byte m =-128;

byte q =1;

byte p = (byte)(m - q);//这一步其实编译器会报错,其实是发现越界了,我们强行转化为byte就可以看出结果。

System.out.println( p);p的结果为:127

一:表示法:

1、正数5的表示法

假设有一个 int 类型的数,值为5,那么,我们知道它在计算机中表示为:

00000000 00000000 00000000 00000101

5转换成二制是101,不过int类型的数占用4字节(32位),所以前面填了一堆0。

2、负数-5的表示法

现在想知道,-5在计算机中如何表示?在计算机中,负数以原码的补码形式表达。

二、概念:

1、原码:一个正数,按照绝对值大小转换成的二进制数;一个负数按照绝对值大小转换成的二进制数,然后最高位补1,称为原码。

比如 00000000 00000000 00000000 00000101 是 5的 原码。

10000000 00000000 00000000 00000101 是 -5的 原码。

备注:

比如byte类型,用2^8来表示无符号整数的话,是0 - 255了;如果有符号, 最高位表示符号,0为正,1为负,那么,正常的理解就是-127 至 +127了.这就是原码了,值得一提的是,原码的弱点,有2个0,即+0和-0(10000000和00000000);还有就是,进行异号相加或同号相减时,比较笨蛋,先要判断2个数的绝对值大小,然后进行加减操作,最后运算结果的符号还要与大的符号相同;于是,反码产生了。

2、反码:正数的反码与原码相同,负数的反码为对该数的原码除符号位外各位取反[每一位取反(除符号位)]。

取反操作指:原为1,得0;原为0,得1。(1变0; 0变1)

比如:正数00000000 00000000 00000000 00000101  的反码还是00000000 00000000 00000000 00000101

负数10000000 00000000 00000000 00000101  的反码则是11111111 11111111 11111111 11111010。

反码是相互的,所以也可称:10000000 00000000 00000000 00000101 和 [**************]1 11111111 11111010互为反码。

备注:还是有+0和-0,没过多久,反码就成为了过滤产物,也就是,后来补码出现了。

3、补码:正数的补码与原码相同,负数的补码为对该数的原码除符号位外各位取反,然后在最后一位加1.

比如:10000000 00000000 00000000 00000101 的补码是:11111111 [**************]1 11111010。

那么,补码为:

11111111 11111111 11111111 11111010 + 1 = 11111111 [**************]1 11111011

备注:1、从补码求原码的方法跟原码求补码是一样的,也可以通过完全逆运算来做,先减一,再取反。

2、补码却规定0没有正负之分

所以,-5 在计算机中表达为:11111111 11111111 [**************]1。转换为十六进制:0xFFFFFFFB。

三、再举一例

我们来看整数-1在计算机中如何表示。假设这也是一个int类型,那么:

1、先取-1的原码:10000000 00000000 00000000 00000001

2、得反码:    11111111 11111111 11111111 11111110(除符号位按位取反)

3、得补码:    11111111 11111111 11111111 11111111

可见,-1在计算机里用二进制表达就是全1。16进制为:0xFFFFFF

四、主要知识点:

正数的反码和补码都与原码相同。

负数的反码为对该数的原码除符号位外各位取反。

负数的补码为对该数的原码除符号位外各位取反,然后在最后一位加1

源码:优点在于换算简单 缺点在于两个零 加减法需要独立运算

反码:有点在于表示清晰 缺点在于两个零 加减法同样需要独立运算

补码:优点在于一个零 范围大  减法可以转为加法 缺点在于理解困难

下面是书上原文:

原码表示法规定:用符号位和数值表示带符号数,正数的符号位用“0”表示,负数的符号位用“1”表示,数值部分用二进制形式表示。

反码表示法规定:正数的反码与原码相同,负数的反码为对该数的原码除符号位外各位取反。

补码表示法规定:正数的补码与原码相同,负数的补码为对该数的原码除符号位外各位取反,然后在最后一位加1.

正零和负零的补码相同,[+0]补=[-0]补=0000 0000B

五、特殊情况-128

10000000,那么,它的原码是什么呢?从补码求原码的方法跟原码求补码是一样的。先保留符号位其它求反: 1111 1111, 再加1,11000 0000, 超过了8位了。对,用8位数的原码在这里已经无法表示了。

那么,回到原码处, 它的原码也是 1000 0000(超出的自动丢失),1000 0000 在原码表示什么呢? -0,但补码却规定0没有正负之分。

转换一下思路,看看计算机里,是怎么运算的:

对于负数,先取绝对值,然后求反,加一

-128 -> 128 -> 1000 0000-> 0111 1111 -> 1000 0000

现在明确了吧

所以, 8位有符号的整数取值范围的补码表示

1000 0000 到 0000 0000, 再到 0111 1111

即 -128 到 0, 再到 127

最终 -128 ~ +127

永远记住:程序里的加减法对二进制是永远有效的。但是并不一定适合于真实世界。

byte m =-128;

byte q =1;

byte p = (byte)(m - q);//这一步其实编译器会报错,其实是发现越界了,我们强行转化为byte就可以看出结果。

System.out.println( p);p的结果为:127


相关内容

  • 无符号型和有符号数
  • 理解有符号数和无符号数 2008-09-23 14:15 负数在计算机中如何表示呢? 这一点,你可能听过两种不同的回答. 一种是教科书,它会告诉你:计算机用"补码"表示负数.可是有关"补码"的概念一说就得一节课,这一些我们需要在第6章中用一章的篇幅讲2进制的一 ...

  • 上机1 C语言的运行环境和运行过程
  • 上机一 C 语言的运行环境和运行过程 上机目的: 1. 掌握c 程序设计编程环境visual c++,掌握运行一个c 程序设计的基本步骤,包括编辑.编译.连接和运行. 2. 掌握c 语言程序设计的基本框架,能够编写简单的c 程序. 3. 了解程序调试的基本思想,能找出并改正c 程序中的语法错误. 上 ...

  • 数制与编码
  • 第1章 数制与编码 学习目标: 本章主要介绍了计算机中关于数的表示方法.几种常用数制的转换.机器数的表示方法和常用编码等内容.使学生通过对数的基础知识的学习,可以为后续单片机原理的学习打下基础. 知识点: 1.二进制.十六进制.十进制表达形式及其相互转换: 2.机器数中关于有符号数的原码.反码.补码 ...

  • 计算机原码反码补码
  • 在数学中是将正号+ 负号- 放在绝对值前边表示该数是正数还是负数的,计算机只能识别0和1,使用的是二进制.计算机中就用一个数的最高位作为符号位,并用0表示正数,1表示负数.这样数的符号也可以用数字表示了.在计算机中,负数的二进制有3种表示方法:原码.反码和补码.任何正数的原码反码和补码形式完全相同, ...

  • 原码反码补码移码
  • 概念介绍: 计算机中的信息都是以二进制形式表示的,数值有正负之分,计算机就用一个数的最高位存放符号(0为正,1为负).这就是机器数的原码了.设机器能处理的位数为8.即字长为1byte,原码能表示数值的范围为(-127~-0 + 0~127)共256个. 有了数值的表示方法就可以对数进行算术运算.但是 ...

  • 二进制数的原码.反码及补码表示
  • (注意:理解的彻底这里) 二进制数的原码.反码及补码表示 1.机器数与真值 机器数:数在机器中的编码表示. 真 值:一般书写表示的数. 机器数中,数值和符号完全数字化.计算机在进行数字运算时,采用把各种符号位和数字位一起编码的方法.常见的有原码.反码及补码表示法. 2.原码表示法 原码表示法是机器数 ...

  • 计算机中信息的表示及其运算
  • 第二章 计算机中信息的表示及其运算 信息和数字在计算机中如何进行表示.如何进行运算是计算机的一个基本问题,在讲解计算机组成技术之前,需要先了解一下信息在计算机中如何表示. 2.1 进位计数制 一. 进位计数制: 在我们的日常生活中最常用的计数方式是十进制,但在计算机中最常用的计数方式是二进制,这是由 ...

  • 二八十十六进制转换方法
  • 二八十十六进制转换 十进制小数转换成二进制小数 进制转换是人们利用符号来计数的方法,包含很多种数字转换.进制转换由一组数码符号和两个基本因素("基"与"权")构成. 在高速发展的现代社会,计算机浩浩荡荡地成为了人们生活中不可缺少的一部分,帮助人们解决通信,联络 ...

  • 原码.反码和补码
  • 什么是原码? 原码(true form)是一种计算机中对数字的二进制定点表示方法.原码表示法在数值前面增加了一位符号位(即最高位为符号位),该位为0表示正数,该位为1表示负数,其余位表示数值的大小. 原码的优点:简单直观:例如,我们用8位二进制表示一个数,+11的原码为00001011,-11的原码 ...