• 整数和浮点数的表示方法


    第一次写博客,没什么经验,会保持更新的,文章也会不断优化的,请大家多多指教

    整数表示

    现代计算机存储和处理的信息以二值表示,也即是只包含0和一的二进制数字,其中整数表示的方法分为有符号整数、无符号整数。常用的数字表示方法有二进制、十进制、八进制、十六进制。下表为十六进制、十进制、和二进制的对应表示法。

    十六进制 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F
    :- | :-: | :-: | :-: | :-: | :-: | :-: | :-: | :-: | :-: | :-: | :-: | :-: | :-: | :-: | :-: | :-: | :-: | :-: | :-: | :-:
    十进制 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15
    二进制 | 0000 | 0001 | 0010 | 0011 | 0100 | 0101 | 0110 | 0111 | 1000 | 1001 | 1010 | 1011 | 1100 | 1101 | 1110 | 1111

    无符号整数

    B2U() 为将二进制数转换为无符号数的函数
    B2U[0001] = 0 * 2^3 + 0 * 2^2 + 0 * 2^1 + 1 * 2^0 = 1;
    B2U[0101] = 0 * 2^3 + 1 * 2^2 + 0 * 2^1 + 1 * 2^0 = 5;
    B2U[0001] = 0 * 2^3 + 0 * 2^2 + 0 * 2^1 + 1 * 2^0 = 1;
    B2U[0001] = 0 * 2^3 + 0 * 2^2 + 0 * 2^1 + 1 * 2^0 = 1;

    设计算机为w位(上为4位,现在计算机一般为64位),则可以表示最大无符号整数为:(2^w - 1),最小为:0;

    有符号整数

    B2T[0001] = 0 * 2^3 + 0 * 2^2 + 0 * 2^1 + 1 * 2^0 = 1;
    B2T[0101] = 0 * 2^3 + 1 * 2^2 + 0 * 2^1 + 1 * 2^0 = 5;
    B2T[1011] = -1 * 2^3 + 0 * 2^2 + 0 * 2^1 + 1 * 2^0 = -5;
    B2T[1111] = -1 * 2^3 + 0 * 2^2 + 0 * 2^1 + 1 * 2^0 = -1;

    设计算机为w位(上为4位,现在计算机一般为64位),则可以表示最大无符号整数为:(2^(w-1) - 1),最小为:(-2^(w-1));

    浮点数表示

    二进制小数

    以下为个人理解,先举个例子:

    十进制表示 小数值 二进制表示
    1 1 000001
    0.5 1/2 00000.1
    0.25 1/4 0000.01
    0.125 1/8 000.001
    0.75 3/4 0000.11
    1.5625 25/16 01.1001
    ∉εεεεεεεε
    仔细看就会返现一个规律:
    1的二进制表示为:000001,除以8,即2^3
    3的二进制表示为:000011,除以4,即2^2
    25的二进制表示为:011001,除以16,即2^4
    没错,整数减少一倍,二进制中小数点右移一位,如果整数增加一倍,则二进制中小数左移一位

    IEEE浮点表示

    目前所有的计算机都支持的表示浮点数的标准
    V = (-1)^s * M * 2^E

    • 数值(value)V
    • 符号(sign)s决定这数是负数(s = 1)还是正数(s = 0),而对于数值0的符号位解释作为特殊情况处理。
    • 尾数(significand)M是一个二进制小数,他的范围是1(2-ε),或者是0(1-ε)。
    • 阶码(exponent)E的作用是对浮点数加权,这个权重是2的E次幂(可能是负数)。
      将浮点数的位划分为三个字段,分别对这些值进行编码:
    • 一个单独的符号位s直接编码符号s。
    • k位的阶码字段exp = e(k-1) + ... + e(0)编码阶码E
    • n位小数字段frac = f(n-1) + ... + f(0)编码尾数M,但是编码出来的值也依赖于阶码字段的值是否等于0。

    最常见的单精度浮点格式float32位:s 1位,exp k=8位,frac n = 23位。
    双精度浮点格式double:s 1位, exp k = 11位,frac n = 52位。

  • 相关阅读:
    HUE配置文件hue.ini 的impala模块详解(图文详解)(分HA集群)
    poj 1815 Friendship (最小割+拆点+枚举)
    Android项目中包名的改动
    Android MediaPlayer Error -1004
    hive原生和复合类型的数据载入和使用
    Linux学习笔记之权限与命令之间的关系(重要)及文件与文件夹知识总结
    kafka集群搭建与apiclient创建
    Android中各种Adapter的使用方法
    【从零学习Python】Ubuntu14.10下Python开发环境配置
    leetcode
  • 原文地址:https://www.cnblogs.com/it-abel/p/9158483.html
Copyright © 2020-2023  润新知