zoukankan      html  css  js  c++  java
  • 计算机中的二进制、八进制、十进制、十六进制

    1.1 进制

    二进制:逢二进一,数值只有0和1。

    八进制:逢八进一,数值有0,1,2,3,4,5,6,7

    十进制:逢十进一,数值有0,1,2,3,4,5,6,7,8,9

    十六进制:逢十六进一,数值有0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F

    1.2 进制转换

    二进制、八进制、十六进制转为十进制

    十进制转为二进制、八进制、十六进制

    1.3 原码,反码,补码

    1.3.1 机器数和真值

    机器数:一个数在计算机中的二进制表示形式。叫做这个数的机器数。机器数是带符号的,最高位0表示正数,1表示负数。
    示例:
    比如10进制中的+3,计算机长度为8位。转为二进制是0000 0011。
    比如-3,转为二进制是1000 0011。

    真值:因为第一位是符号位,所以机器数的形式值就不等于真正的数值。
    比如1000 0011,
    作为负数可以是-3,作为正数可以说131.
    为了区分,将带符号位的计算数对应的真正的数值称为机器数的真值。

    1.3.2 原码,反码,补码

    原码:就是符号位加上真值的绝对值,即第一位表示符号位,其余位表示值。

    +1 = [0000 0001]原
    -1 = [1000 0001]原
    

    原码是人脑最容易理解和计算的表示方式.

    反码:正数的反码是其本身,负数的反码是在其原码的基础上,符号位不变,其余各位按位取反。

    +1 = [0000 0001]原 = [0000 0001]反
    -1 = [1000 0001]原 = [1111 1110]反
    

    一个反码表示的是负数, 人脑无法直观的看出来它的数值. 通常要将其转换成原码再计算。

    补码:正数的补码是其本身,负数的补码是在原码的基础上,符号位不变,其余各位取反后+1。

    +1 = [0000 0001]原 = [0000 0001]反 = [0000 0001]补
    -1 = [1000 0001]原 = [1111 1110]反 = [1111 1111]补
    

    对于负数, 补码表示方式也是人脑无法直观看出其数值的. 通常也需要转换成原码在计算其数值.

    于是人们开始探索 将符号位参与运算, 并且只保留加法的方法. 首先来看原码。计算十进制的表达式: 1-1=0

    1 - 1 = 1 + (-1) = [00000001]原 + [10000001]原 = [10000010]原 = -2
    

    如果用原码表示, 让符号位也参与计算, 显然对于减法来说, 结果是不正确的.这也就是为何计算机内部不使用原码表示一个数.

    为了解决原码做减法的问题, 出现了反码。计算十进制的表达式:

    1-1=0
    
    1 - 1 = 1 + (-1)
    = [0000 0001]原 + [1000 0001]原
    = [0000 0001]反 + [1111 1110]反
    = [1111 1111]反 = [1000 0000]原
    = -0
    

    发现用反码计算减法, 结果的真值部分是正确的. 而唯一的问题其实就出现在”0”这个特殊的数值上. 虽然人们理解上+0和-0是一样的, 但是0带符号是没有任何意义的. 而且会有[0000 0000]原和[1000 0000]原两个编码表示0.

    于是补码的出现, 解决了0的符号以及两个编码的问题:

    1-1 = 1 + (-1)
    = [0000 0001]原 + [1000 0001]原
    = [0000 0001]补 + [1111 1111]补
    = [0000 0000]补=[0000 0000]原
    

    这样0用[0000 0000]表示, 而以前出现问题的-0则不存在了.而且可以用[1000 0000]表示-128:

  • 相关阅读:
    idea中导入jquery无法生效解决办法
    如何用最简单的方式解释依赖注入?依赖注入是如何实现解耦的?
    spring的ioc依赖注入的三种方法(xml方式)
    向存在外键的表中插入数据时出错的原因以及插入外键为空的方法
    mysql一条语句添加多条数据
    SQL中distinct的用法
    Java实体对象为什么要实现Serializable接口?
    servlet中使用request.getHeader("referer")获取页面从哪跳转过来的
    java动态拼接sql语句并且执行时给sql语句的参数赋值
    正则表达式
  • 原文地址:https://www.cnblogs.com/niuben/p/14271863.html
Copyright © 2011-2022 走看看