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所以带负号

  • 相关阅读:
    ROM定制开发教程-Android adb命令用法与实例解析
    Android内存优化—dumpsys meminfo详解
    adb命令查看手机应用内存使用情况
    【特征检测】BRISK特征提取算法
    焦虑症
    基于Lua的游戏服务端框架简介
    流量
    学习React Native必看的几个开源项目
    那些离开私企进入国企的人,现在都过得怎么样了?
    分布式系统中有关一致性的理解
  • 原文地址:https://www.cnblogs.com/cici-new/p/10471693.html
Copyright © 2011-2022 走看看