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:

  • 相关阅读:
    二进制位运算
    Leetcode 373. Find K Pairs with Smallest Sums
    priority_queue的用法
    Leetcode 110. Balanced Binary Tree
    Leetcode 104. Maximum Depth of Binary Tree
    Leetcode 111. Minimum Depth of Binary Tree
    Leetcode 64. Minimum Path Sum
    Leetcode 63. Unique Paths II
    经典的递归练习
    案例:java中的基本排序
  • 原文地址:https://www.cnblogs.com/niuben/p/14271863.html
Copyright © 2011-2022 走看看