`
weihe6666
  • 浏览: 432879 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

负数的二进制表示方法 (转)

    博客分类:
  • c
 
阅读更多
假设有一个 int 类型的数,值为5,那么,我们知道它在计算机中表示为:

00000000 00000000 00000000 00000101

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

现在想知道,-5在计算机中如何表示?

 

在计算机中,负数以原码的补码形式表达。

什么叫补码呢?这得从原码,反码说起。

 

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

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

          10000000 00000000 00000000 00000101 是 -5的 原码。

 

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

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

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

负数10000000 00000000 00000000 00000101每一位取反(除符号位),得11111111 11111111 11111111 11111010。

称:11111111 11111111 11111111 11111010 是 10000000 00000000 00000000 00000101 的反码。

反码是相互的,所以也可称:

10000000 00000000 00000000 00000101 和 11111111 11111111 11111111 11111010互为反码。

 

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

比如:10000000 00000000 00000000 00000101 的反码是:11111111 11111111 11111111 11111010。

那么,补码为:

11111111 11111111 11111111 11111010 + 1 = 11111111 11111111 11111111 11111011


所以,-5 在计算机中表达为:11111111 11111111 11111111 11111011。转换为十六进制: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
分享到:
评论

相关推荐

    Matlab负数十进制转二进制代码

    补码表示法是一种常用的二进制表示法,它将负数表示为其补码的形式。补码是将二进制数的每一位取反,然后加 1 得到的结果。例如,二进制数 1010 的补码是 0101 加 1 得到的 0110。 在 dec2binPN 函数中,我们首先...

    (word完整版)Matlab负数十进制转二进制代码.doc

    接着,我们使用按位取反的方法来生成负数的二进制数。最后,我们将处理完的十进制数转换为二进制数,并将其输出。 在 Matlab 中,可以使用以下代码来调用该函数: ```matlab clc % 输入的十进制数,可以是正数也...

    java 进制转换,二进制 十进制 十六进制 正数 负数的进制等等!.docx

    对于小数的进制转换,通常会涉及到浮点数的二进制表示,如IEEE 754标准。Java并没有直接提供将十进制小数转换为其他进制的内置方法,但可以通过一些数学运算和位操作实现。例如,将十进制小数转换为二进制通常需要...

    JAVA实现十进制整数(正负)转换为二进制输出

    任意输入一个十进制整数,包括正数负数,通过程序实现可以输出相应的二进制编码

    负数二进制[总结].pdf

    负数二进制表示的计算机实现 在计算机系统中,二进制数的表示是非常重要的。前面我们已经了解了二进制数的基础知识,但是在实际应用中,二进制数还需要考虑负数的表示。负数的表示是计算机系统中非常重要的一部分,...

    负数二进制

    本文档详细介绍了 数字在计算机中时如何用二进制表示的,以及计算机是如何计算减法运算的,简单介绍了数字的原码、反码、补码,没有了解这方面的 请先去了解一点,有助于理解。

    处理负数,二进制最高位是1表示负数,0表示正数delphi

    十六进制转换成二进制,处理负数,二进制最高位是1表示负数,0表示正数。源代码,已测试,

    浮点数的二进制转换

    最后,将符号位、阶码和尾数连起来组成完整的浮点数二进制表示。 浮点数的二进制转换可以分为以下几步: 1. 将浮点数分解为整数部分和小数部分。例如,浮点数 12.5 可以分解为整数部分 12 和小数部分 0.5。 2. 将...

    整数的二进制表示与位运算

    正整数相乘的结果居然出现了负数,要理解这个行为,我们需要看下整数在计算机内部的二进制表示...... 负数的二进制表示看上去可能比较奇怪和难以理解,但这种表示其实是非常严谨和正确的,是不是很奇妙?

    【老生谈算法】matlab十进制转换十六进制及互转.docx

    在计算机科学和信息技术领域中,十进制和十六进制是两个常用的数字表示系统。十进制是我们日常生活中使用的数字系统,而十六进制则广泛应用于计算机编程和数据存储中。MATLAB 作为一款功能强大的计算工具,提供了...

    十进制转换二进制的原理与方法:从数学到计算机的基础知识.txt

    本资源系统地介绍了十进制转换二进制的原理和方法,包括进制的概念、分类、表示、运算、转换等内容,以及十进制和二进制在数学和计算机中的应用和意义。本资源适合数学和计算机学习者和考生使用,帮助他们深入理解和...

    二进制、八进制、十进制、十六进制之间的转换

    本文档主要讨论了二进制、八进制、十进制、十六进制之间的转换,包括各个进制的表示形式、源码、补码、位运算、多个进制之间的转换思想,并提供了相关代码,实现多进制之间的相互转化。 一、进制的表示形式 * 二...

    [十进制小数转换二进制]二进制、八进制、十六进制转换方式_0.pdf

    原码是直接表示数值的二进制形式,正数不变,负数最高位为1。反码是负数的原码除了符号位外,其余位按位取反。补码是负数的反码加1,它是计算机中存储和运算负数的标准方式。 6.6 通过调试查看变量的值 在开发过程...

    ASCII及进制转换器

    转换为10进制的双字节字符(例如汉字)有:正数、负数、字节分离三种表示方法 支持加入前置及后置字符,可轻松组合出UTF-8编码等字符 .键盘码的查询:以10和16进制显示键盘按键对应编码,可作为编程方面的查询工具...

    十进制转二进制C语言.docx

    函数内部首先检查`decimal`是否等于0,如果是,则直接打印0并返回,因为0的二进制表示就是0。 对于非零的十进制数,我们使用一个整型数组`binary`来存储二进制数的各位。数组的大小设为32,因为32位足以存储任何32...

    php_二进制_原码_反码_补码.docx

    三、 PHP 中的二进制表示 1. PHP 中的数都是有符号的。 2. 在计算机中,都是以补码的方式来运算的。 四、 位运算符 1. $a & $b:And(按位与)两个都为 1,结果为 1。 2. $a | $b:Or(按位或)两个有一位为 1,...

    二进制-原码-补码-反码.pdf

    "二进制-原码-补码-反码" 在计算机科学中,二进制数是计算机中最基本的表示形式。为了能够正确地表示和处理有符号数和无符号数,计算机科学家们提出了原码、反码和补码三种表示方法。 原码是指在二进制数的最高位...

    二进制补码、小数的补码及运算规则

    二进制补码、小数的补码及运算规则 一、补码的概念和原理 ...二进制补码、小数的补码及运算规则是计算机系统中对数字的二进制表示方法的重要组成部分,理解和掌握这些概念和规则对于计算机系统的设计和实现至关重要。

    二进制补码加法器实验1

    二进制补码加法器实验1主要涉及计算机硬件组成原理中的一个重要概念——补码运算。补码是一种在计算机系统中表示有符号整数的方法,它使得加法和减法运算可以通过同样的硬件电路来实现。在这个实验中,学生将通过...

    matlab实现十进制到二进制定点有符号补码小数的转换

    matlab实现十进制到二进制定点有符号补码小数的转换,其中定点小数的整数部分位长和小数部分位长可以自己指定,输出的最高位表示符号位(0为整数,1为负数),补码表示

Global site tag (gtag.js) - Google Analytics