`

(转)一个负数如何用二进制表示

 
阅读更多

这里设计到的知识点有:原码、反码、补码。
 
我们已经知道计算机中,所有数据最终都是使用二进制数表达。
我们也已经学会如何将一个10进制数如何转换为二进制数。
不过,你是否知道一个负数如何用二进制表达?
 
比如,假设有一 int 类型的数,值为5,那么,我们知道它在计算机中表示为:
00000000 00000000 00000000 00000101
5转换成二制是101,不过int类型的数占用4字节(32位),所以前面填了一堆0。
现在想知道,-5在计算机中如何表示?
 
在计算机中,负数以其正值的补码形式表达(即:原码[正值]的反码+1)
什么叫补码呢?这得从原码,反码说起。
 
1、原码:一个整数,按照绝对值大小转换成的二进制数,称为原码。
比如 00000000 00000000 00000000 00000101 是 5的“原码”。
 
2、反码:将二进制数按位取反,所得的新二进制数称为原二进制数的反码。
取反操作指:原为1,得0;原为0,得1。(1变0; 0变1)
比如:将00000000 00000000 00000000 00000101每一位取反,

得11111111 11111111 11111111 11111010
称:11111111 11111111 11111111 11111010 是 00000000 00000000 00000000 00000101 的反码。
反码是相互的,所以也可称:
11111111 11111111 11111111 11111010 和 00000000 00000000 00000000 00000101 互为反码。
 
3、补码:反码加1称为补码。

也就是说,要得到一个数的补码,先得到反码,然后将反码加上1,所得数称为补码。
比如:00000000 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的原码:00000000 00000000 00000000 00000001
2、得反码: 11111111 11111111 11111111 11111110
3、得补码: 11111111 11111111 11111111 11111111

十六进制表示: 0xFFFFFFFF

分享到:
评论

相关推荐

    负数的二进制算法.doc

    负数的二进制表示形式是计算机科学中一个重要的概念。它可以帮助我们更好地理解计算机是如何存储和处理负数的。下面是关于负数的二进制算法的详细知识点: 一、正数的二进制表示形式 在计算机科学中,正数的二进制...

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

    在 Matlab 中,对十进制数的二进制表示是一个非常重要的操作。然而,Matlab 的内置函数 dec2bin 只能将正的十进制数转换为二进制数,无法处理负数的情况。 为了解决这个问题,我们需要编写一个可以将负数十进制数...

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

    当我们有一个正数,它的二进制表示就是其原本的二进制形式;而负数则需要通过取反加1的方式来得到其补码形式。 例如,假设我们想把十进制的-5转换为二进制的补码表示。首先,我们需要知道5的二进制形式是0000 0101...

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

    在本代码中,我们编写了一个函数 dec2binPN,该函数可以将正负整数转换为二进制数。函数的代码如下: ```matlab function [numbin] = dec2binPN(numdec, N) % 判断输入数正负 if (numdec >= 0) % 正数转二进制 ...

    负数二进制

    对于一个负数,其2的补码是其原码(符号位为1的二进制表示)取反(0变1,1变0),然后加1。以-8为例,其正数表示为0000 1000,取反后得到1111 0111,再加1得到1111 1000,这就是-8的2的补码表示。 通过2的补码,...

    float浮点数二进制表示转换[源代码]

    本文将深入探讨浮点数的二进制表示,并通过一个源代码实例介绍如何进行浮点数与二进制之间的转换。 浮点数的二进制表示遵循IEEE 754标准,该标准定义了单精度(32位)和双精度(64位)浮点数的格式。对于单精度...

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

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

    c语言编程题:从键盘输入一个十进制数,将其转换为二进制、八进制和十六进制数,并同时输出。

    根据给定的文件信息,本篇文章将围绕C语言编程题展开,主要介绍如何从键盘接收一个十进制数,并将其转换成二进制、八进制以及十六进制数进行输出的方法。 ### 一、问题描述 题目要求通过C语言编程实现从键盘输入一...

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

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

    java十进制转换二进制

    本文通过一个具体的Java程序实例,详细介绍了如何将十进制数(包括正数和负数)转换为二进制表示的方法。通过对程序逻辑的逐步分析,我们不仅学习了基本的转换过程,还深入了解了负数在计算机中的补码表示方式。这种...

    C++实现十进制转二进制运算(改进版)

    例如,可以定义一个名为`decToBin`的函数,接收一个整数作为参数,返回其二进制表示的字符串。 5. **错误处理**: "上次输出顺序错误"可能指的是在处理负数时,二进制位顺序出现错误。这可能是由于在处理负数的...

    1.二进制字符串转十进制数值_labview_二进制转十进制_

    2. 计算权重:创建一个数组,表示每位的权重,例如对于长度为n的二进制字符串,权重数组从右到左依次为2^(n-1), 2^(n-2), ..., 2^0。 3. 乘法与累加:遍历字符数组,将每个字符(0或1)对应的权重乘以该值,然后...

    用栈实现十进制转换成二进制(c语言)

    重复这个过程,直到商为0,所有余数按逆序排列,就构成了原始十进制数的二进制表示。 以下是用栈来实现这一过程的步骤: 1. 初始化一个栈,可以使用数组或链表来实现。栈的大小应足够存储输入的十进制数的最大位数...

    2进制,16进制,10进制相互转化的c++算法

    将所有余数倒序排列,得到的就是二进制表示。对于负数,可先将其转换为正数进行计算,再在前面加上负号。 ```cpp #include #include std::string decimalToBinary(int num) { std::bitset<32> bits(num); ...

    C语言浮点数的二进制表示

    本文将深入探讨C语言中浮点数的二进制表示,并通过一个具体的例子来解释浮点数和整数在内存中的差异。 #### 浮点数的背景 在讨论浮点数的具体表示之前,我们首先需要了解几个基本概念: - **浮点数**:用于表示...

    易语言十进制转二进制

    在易语言中,可以先将负数转换为其等值的正数的二进制表示,然后在其前面加上符号位,即1表示负数,0表示正数。 此外,易语言还提供了“二进制字符串取整数”函数,可以将二进制字符串转换回十进制数。这在进行数据...

    二进制、八进制、十六进制转换.doc

    在编程中,调试工具可以帮助我们查看变量的二进制、八进制、十六进制或十进制表示,以便理解其实际值。 6.7 本章小结 进制转换虽然看似简单,但却是理解计算机底层工作原理的关键。掌握不同进制间的转换有助于我们...

    linux下int转二进制字符串的方法_int转二进制字符串的方法_QT_linux_

    这种方法适用于大部分情况,但不适用于负数,因为负数的二进制表示是补码形式。 为了处理负数,我们可以使用`std::bitset`类,它是C++标准库的一部分,能方便地处理二进制数据: ```cpp #include std::string ...

Global site tag (gtag.js) - Google Analytics