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

    假设有一个 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)
    比如:正数00000000 00000000 00000000 00000101 的反码还是 00000000 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再取反,

    即11111110 => 11111101 => 10000010,结果为-2,因此~true = ~1 = -2。 
               简单的计算方法是操作数取负数再减1,~1 = -1-1 = -2。

    再举一例,我们来看整数-1在计算机中如何表示。

    假设这也是一个int类型,那么: 
    1、先取-1的原码:10000000 00000000 00000000 00000001 
    2、得反码: 11111111 11111111 11111111 11111110(除符号位按位取反) 
    3、得补码: 11111111 11111111 11111111 11111111

  • 相关阅读:
    MSP430:输入捕获
    MSP430:串口输出
    测试输出时钟频率
    C# MySql Select
    C# MySql 连接
    MSP430:PWM产生
    MSP430:定时器学习TimerA
    MSP430:中断简介
    MSP430 PIN 操作寄存器
    剑指offer---包含min函数的栈
  • 原文地址:https://www.cnblogs.com/sprinng/p/3379126.html
Copyright © 2011-2022 走看看