zoukankan      html  css  js  c++  java
  • 负数与二进制转换方法[转载]

    原文:https://www.jb51.net/article/34133.htm

    --------------------------------------------------------

    1.十进制负数转二进制

    假设有一个int类型的数,值为5,那么,我们知道它在计算机中表示为:(因为Java中int是4个字节。

    所以高位需要补0,占够32位)

    00000000 00000000 00000000 00000101

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

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

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

    原码:一个正数,按照绝对值大小转换成的二进制数;一个负数按照绝对值的大小转换成的二进制数,

    然后最高位补1,称为源码。

    比如 00000000 00000000 00000000 00000101 是5的源码;

            10000000 00000000 00000000 00000101是-5的源码。

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

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

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

                      000000000 00000000 00000000 00000101;

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

                    11111111 11111111 11111111 11111010。

    称: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 

     ================================================================

    下面是书上原文:

    1)源码表示法规定:

    用符号位和数值表示带符号数,正数的符号位用“0”表示,负数的符号位用

    “1”表示,数字部分用二进制形式表示。

    2)反码表示法规定:证书的反码与源码相同,负数的反码与该数的源码除符号位外各位取反。

    3)补码表示法规定:证书的补码与源码相同,负数的补码为对该数的源码除符号位外各位取反,

    然后在最后一位加1.

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

    2.符号位为1的二进制<即补码>转十进制负数

    相信大家已经知道如何个转法了,不过在此还是说明一下。

    1)除去符号位减1.

    2)除去符号位,按位取反;结果就是负数的源码;

    3)源码转成相应的十进制。

    例如:

    -5在计算机中表达<-5的补码>:
    11111111 11111111 11111111 11111011

    1>除去符号位减1:                                  11111111 11111111 11111111 11111010

    2>除去符号位,按位取反<负数的源码>: 10000000 00000000 00000000 00000101

    3>源码转换成十进制数结果:                -                                                                5

         -------因为最高位为1所以带负号

  • 相关阅读:
    大学生自学网
    如何保证主从复制数据一致性
    CDN
    后端 线上 服务监控 与 报警 方案2
    利用 Gearman 实现系统错误报警功能
    增量部署和全量部署
    后端线上服务监控与报警方案
    简析TCP的三次握手与四次分手
    301 和 302 对 SEO 的影响
    Linux 查看负载
  • 原文地址:https://www.cnblogs.com/cici-new/p/10471693.html
Copyright © 2011-2022 走看看