字符编码--笔记

一、原码、反码、补码

  • 补码:
    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

二、二进制校验码

  • 奇偶校验码-奇校验码 和 偶校验码 的统称.
原编码奇校验偶校验
00000000 10000 0
00100010 00010 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-00007F0xxxxxxx //兼容ASCII的前127位
000080-0007FF110xxxxx 10xxxxxx //”110”表明:占用2个字节
000800-00FFFF1110xxxx 10xxxxxx 10xxxxxx
010000-10FFFF11110xxx10xxxxxx10xxxxxx10xxxxxx
  • UTF-16, 以16位无符号整数为单位。略
  • UTF-32, 以32位无符号整数为单位。略
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值