字符编码--笔记

来源:互联网 发布:二级access题库软件 编辑:程序博客网 时间:2024/06/06 04:11

一、原码、反码、补码

  • 补码:
    1. CPU的减法,通过加法器和补码实现
    2. 溢出(循环):256-1 与 -1 二进制一样。
  • 负数补码计算方法:数值位(符号位外的后7位),取反+1 //不”+1”的话,减法不能成功地变为加法

    1. -128 1000,0000 //-128是人为规定的,从-127而来,也是”+1”的原因之一
    2. -127 1000,0001
    3. -1 1111,1111
    4. 0 0000,0000 //-1 + 1 = 1,0000,0000就会溢出了,因为-1 与 256-1 效果一样
    5. 1 0000,0001
    6. 127 0111,1111
  • byte -255[-1, 1]

    1. 原码10000000,1111111//数值位取反–>
    2. 反码11111111,0000000–>+1
    3. 补码1111’1111,0000001
  • int -255[-1, -1, -1, 1]
    1. 原码1000’0000,0000’0000,0000’0000,1111111–>数值位取反
    2. 反码1111’1111,1111’1111,1111’1111,0000000–>+1
    3. 补码1111’1111,1111’1111,1111’1111,0000001

二、二进制校验码

  • 奇偶校验码-奇校验码 和 偶校验码 的统称.
原编码 奇校验 偶校验 0000 0000 1 0000 0 0010 0010 0 0010 1
  • 海明校验码-多重奇偶校验检错码

    1. 可以检测任何位出错,并能纠正1位错误
    2. 必须满足:pow(2,k)-1 >= n+k //pow(2,k) (代表2的k次方)
  • CRC即 循环冗余校验码–广泛应用于数据通信领域和磁介质存储系统中.

三、字节序、bit序、有效位

字节序: 一个数据单元(多字节)的字节顺序。不必考虑byte内部bit的细节。

  • 大,小:权值大,权值小
  • 端:开端,左边是开端,左边是低地址,人的思维从左到右,
  • Big-Endian
    1. 人的习惯。
    2. 权值最大(高)的字节(MSB)放在低地址(端)。
    3. 符号位的判定固定为第一个字节,容易判断正负。
    4. 实例:java,TCP。
  • Little-Endian
    1. 计算机的习惯。
    2. 权值最小的字节(MSB)放在低地址(端)。
    3. 强制转换数据不需要调整字节内容,1、2、4字节的存储方式一样。
    4. 实例:win7

bit序:一个字节内,bit的顺序。大都是大端序,左大右小,比如TCP中6bits的标志位:

  • URG=2^5=32=0x20
  • ACK=2^4=16=0x10
  • PSH=2^3=8=0x08
  • RST=2^2=4=0x04
  • SYN=2^1=2=0x02
  • FIN=2^0=1=0x01

有效位

  • 最低有效位(lsb,least significant bit):
    1. lsb指一个二进制数字中的第0位(即最低位,最低权重位,权值为2^0)
    2. LSB(the Least Significant Byte),多字节序列中具有最大权重的字节。
  • 最高有效位(msb,Most Significant Byte)
    1. lsb的反面。
    2. LSB的反面

Unicode & UTF-8

  • Unicode (uniqueness code) 唯一码。是个字符集,是内存中的值
  • UTF-8,以字节为单位对Unicode进行编码。
    1. “汉”的Unicode编码是0x6C49, 在0x0800-0xFFFF之间,使用3字节模板了:1110xxxx 10xxxxxx 10xxxxxx
    2. 0x6C49对应的二进制:0110 1100 0100 1001, 依次代替3字模板中的x,得到:11100110 10110001 10001001,即E6 B1 89。
Unicode编码(十六进制) UTF-8 字节流(二进制) 000000-00007F 0xxxxxxx //兼容ASCII的前127位 000080-0007FF 110xxxxx 10xxxxxx //”110”表明:占用2个字节 000800-00FFFF 1110xxxx 10xxxxxx 10xxxxxx 010000-10FFFF 11110xxx10xxxxxx10xxxxxx10xxxxxx
  • UTF-16, 以16位无符号整数为单位。略
  • UTF-32, 以32位无符号整数为单位。略
原创粉丝点击