zoukankan      html  css  js  c++  java
  • 计算机中数据的编码方式

    一.整数的表示

    由于计算机只能识别二进制的0和1,在存储数据时就涉及到了对数据的编码问题,计算机中对整数的编码有两种不同的方式,分别为:
    1. 只能表示非负数,此种类型数据称为无符号类型 即 unsigned 
    2. 能表示负数0和正数,此种类型数据称为有符号类型 signed

    二.整型数据类型的表示范围

    C语言支持多种整型数据类型--表示有限范围的整数,

    32位环境整型数据的取值范围:

    C数据类型

    字节数

    编码方式

    能表示的最小值

    能表示的最大值

    unsigned char

    1

    原码

    0 (0x00)

    128 (0xFF)

    char

    1

    补码

    -128 (0x80 )

    127 (0x7F)

    unsigned short

    2

    原码

    0 (0x00 00)

    65535(0xFFFF)

    short

    2

    补码

    -32768(0x8000)

    32767(0x7FFF)

    unsigned int

    4

    原码

    (0x0000 0000)

    (0xFFFF FFFF)

    int

    4

    补码

    (0x8000 0000)

    (0x7FFF FFFF)

    unsigned long

    4

    原码

    (0x0000 0000)

    (0xFFFF FFFF)

    long

    4

    补码

    (0x8000 0000)

    (0x7FFF FFFF)

    unsigned long long

    8

    原码

    (0x0000 0000 0000 0000)

    (0xFFFF FFFF FFFF )

    long long

    8

    补码

    (0x8000 0000 0000 0000 )

    (0x7FFF FFFF FFFF FFFF)

     32位环境的验证:

    sizeof(char) = 1byte
    sizeof(unsigned char) = 1byte
    sizeof(short int) = 2byte
    sizeof(unsigned short int) = 2byte
    sizeof(int) = 4byte
    sizeof(unsigned int) = 4byte
    sizeof(long) = 4byte
    sizeof(unsigned long) = 4byte
    sizeof(long long) = 8byte
    sizeof(unsigned long long) = 8byte

    64位环境整型数据的取值范围: 


    C数据类型

    字节数

    编码方式

    能表示的最小值

    能表示的最大值

    unsigned char

    1

    原码

    0 (0x00)

    128 (0xFF)

    char

    1

    补码

    -128 (0x80 )

    127 (0x7F)

    unsigned short

    2

    原码

    0 (0x00 00)

    65535(0xFFFF)

    short

    2

    补码

    -32768(0x8000)

    32767(0x7FFF)

    unsigned int

    4

    原码

    (0x0000 0000)

    (0xFFFF FFFF)

    int

    4

    补码

    (0x8000 0000)

    (0x7FFF FFFF)

    unsigned long

    8

    原码

    (0x0000 0000 0000 0000)

    (0xFFFF FFFF FFFF )

    long

    8

    补码

    (0x8000 0000 0000 0000 )

    (0x7FFF FFFF FFFF FFFF)

    unsigned long long

    8

    原码

    (0x0000 0000 0000 0000)

    (0xFFFF FFFF FFFF )

    long long

    8

    补码

    (0x8000 0000 0000 0000 )

    (0x7FFF FFFF FFFF FFFF)



    64位环境的验证;

    sizeof(char) = 1

    sizeof(unsigned char) = 1

    sizeof(short int) = 2

    sizeof(unsigned short int) = 2

    sizeof(int) = 4

    sizeof(unsigned int) = 4

    sizeof(long) = 8

    sizeof(unsigned long) = 8

    sizeof(long long) = 8

    sizeof(unsigned long long) = 8


    三.无符号数的编码

    计算机对无符号数的编码方式采用原码的形式,假设一个整数数据类型有 w 位。我们可以将位向量写成 x→,表示整个向量,或者写成 [xw-1 ,xw-2,…,x0],表示向量中的每一位。把 x→看做一个二进制表示的数,就获得了 x→的无符号表示。可以用一个函数 B2Uw(Binary to Unsigned)的缩写,长度为 w)来表示 :

     函数B2Uw将一个长度为w的0,1串映射到一个非负数,具体的示例如下:

    B2U4([0001]) = 0 * 2^3 + 0 * 2^2 + 0 * 2^1 + 1 * 2^0 = 0 + 0 + 0 + 1 = 1
    B2U4([0101]) = 0 * 2^3 + 1 * 2^2 + 0 * 2^1 + 1 * 2^0 = 0 + 4 + 0 + 1 = 5
    B2U4([1011]) = 1 * 2^3 + 0 * 2^2 + 1 * 2^1 + 1 * 2^0 = 8 + 0 + 2 + 1 = 11
    B2U4([1111]) = 1 * 2^3 + 1 * 2^2 + 1 * 2^1 + 1 * 2^0 = 8 + 4 + 2 + 1 = 15
    无符号编码方式下w位可表示的范围:
    最下值:[000......0] = 0
    最大值:[111......1] = 2^w - 1;
    总结:一个w位的二进制可表示的无符号类型整数的范围是0 — 2^w -1;

    四. 有符号整数的编码
    实际的应用中,会需要负数的值,最常用的有符号数的编码方式为补码编码,在这个定义中,将字的最高有效位解释为负权(negative weight)。我们用函数 B2Tw(Binary to Two’s-complement 的缩写,长度为 w)来表示

    最高有效位 xw-1 也称为符号位,它的“权重”为 -2^(w-1),是无符号表示中权重的负数。符号位被设置为 1 时,表示值为负,而当设置为 0 时,值为非负.具体的编码示例如下:

    B2T4( [0001] ) =0* 2^3 + 0 *2^2 + 0 *2^1 +1* 2^0 = 0 + 0 + 0 + 1 = 1
    B2T4( [0101] ) =0 * 2^3 +1 *2^2 + 0 *2^1 +1* 2^0 = 0 + 4 + 0 + 1 = 5
    B2T4( [1011] ) =1 * 2^3 +0 *2^2 + 1 *2^1 +1* 2^0 = −8 + 0 + 2 + 1 = −5
    B2T4( [1111] ) =1 * 2^3 +1 *2^2 + 1 *2^1 +1* 2^0 = −8 + 0 + 2 + 1 = −1

    有符号编码方式下w位可表示的范围:
    让我们来考虑一下 w 位补码所能表示的值的范围。它能表示的最小值是位向量 [10…0](也就是设置这个位为负权,但是清除其他所有的位),其整数值为-2^(w-1),而最大值是位向量[01…1](清除具有负权的位,而设置其他所有的正权位)其整数值为2^(w-1);
    所以范围为:-2^(w-1) ——2^(w-1);


  • 相关阅读:
    ES6 变量的解构赋值
    【js重学系列】new
    【js面试系列】手写常见js方法
    【js重学系列】this
    js-继承
    【js重学系列】数组高阶函数
    【js面试系列】数组去重
    云服务器部署项目-基本使用流程
    mongodb-基本使用
    移动端适配
  • 原文地址:https://www.cnblogs.com/jianghg/p/4417191.html
Copyright © 2011-2022 走看看