02信息的表示和处理
2018-02-06 17:50
106 查看
字节顺序
小端
最低有效字节在最前面大多数Intel兼容机
0x01234567
地址 | … | 0x100 | 0x101 | 0x102 | 0x103 | … |
---|---|---|---|---|---|---|
数据 | … | 67 | 45 | 23 | 01 |
大端
最高有效字节在最前面大多数IBM和Sun Microsystems
网络应用程序发送和接受的数据
0x01234567
地址 | … | 0x100 | 0x101 | 0x102 | 0x103 | … |
---|---|---|---|---|---|---|
数据 | … | 01 | 23 | 45 | 67 |
双端
可以设置成大端或者小端移位运算
逻辑移位(>>>,
<<<)
左移和右移补0
算术移位(
>>,
<<)
左移补符号位,右移补0
整数表示
32位机器C语言的整型数据类型的典型取值范围
数据类型 | 最小值 | 最大值 |
---|---|---|
char | -128 | 127 |
unsigned char | 0 | 255 |
short [int] | -32768 | 32767 |
unsigned short [int] | 0 | 65535 |
int | -2147483648 | 2147483647 |
unsigned [int] | 0 | 4294967295 |
long [int] | -2147483648 | 2147483647 |
unsigned long [int] | 0 | 4294967295 |
long long [int] | -9223372036854775808 | 9223372036854775807 |
unsigned long long [int] | 0 | 18446744073709551615 |
64位机器C语言的整型数据类型的典型取值范围
数据类型 | 最小值 | 最大值 |
---|---|---|
char | -128 | 127 |
unsigned char | 0 | 255 |
short [int] | -32768 | 32767 |
unsigned short [int] | 0 | 65535 |
int | -2147483648 | 2147483647 |
unsigned [int] | 0 | 4294967295 |
long [int] | -9223372036854775808 | 9223372036854775807 |
unsigned long [int] | 0 | 18446744073709551615 |
long long [int] | -9223372036854775808 | 9223372036854775807 |
unsigned long long [int] | 0 | 18446744073709551615 |
无符号数
假设一个整数数据有ww位,可以将位向量写成x→x→表示整个向量,或者写成[xw−1,xw−2,…,x0][xw−1,xw−2,…,x0]表示向量中的每一位二进制转无符号数
B2Uw(x→)≐∑i=0w−1xi2iB2Uw(x→)≐∑i=0w−1xi2i有符号数
原码编码
B2Sw(x→)≐(−1)xw−1∑i=0w−2xi2iB2Sw(x→)≐(−1)xw−1∑i=0w−2xi2i反码编码
B2Ow(x→)≐−xw−1(2w−1−1)+∑i=0w−2xi2iB2Ow(x→)≐−xw−1(2w−1−1)+∑i=0w−2xi2i补码编码
B2Tw(x→)≐−xw−12w−1+∑i=0w−2xi2iB2Tw(x→)≐−xw−12w−1+∑i=0w−2xi2i最高有效位xw−1xw−1称为符号位,权重为−2w−1−2w−1
B2TwB2Tw是一个从长度为ww的位模式到TMinwTMinw和TMaxwTMaxw之间数字的映射,写做
B2Tw:{0,1}w→{−2w−1,…,2w−1−1}B2Tw:{0,1}w→{−2w−1,…,2w−1−1}
注意
|TMinw|=|TMaxw|+1|TMinw|=|TMaxw|+1
UMaxw=2TMaxw+1UMaxw=2TMaxw+1
有符号数和无符号数转换
无符号数到补码
U2Tw(x)≐B2Tw(U2Bw(x))={uu−2wu<2w−1u≥2w−1U2Tw(x)≐B2Tw(U2Bw(x))={uu<2w−1u−2wu≥2w−1补码到无符号数
T2Uw(x)≐B2Uw(T2Bw(x))={x+2wxx<0x≥0T2Uw(x)≐B2Uw(T2Bw(x))={x+2wx<0xx≥0扩展数位
零扩展
无符号数转换为一个更大的数据类型,只需要简单地在表示的开头添加0B2Uw+k([0,...,xw−1,xw−2,...,x0])=B2Uw([xw−1,xw−2,...,x0])B2Uw+k([0,...,xw−1,xw−2,...,x0])=B2Uw([xw−1,xw−2,...,x0])
符号扩展
将一个补码数字转换为一个更大的数据类型,需要添加最高有效位的值的副本B2Tw+k([xw−1,...,xw−1,xw−2,...,x0])=B2Tw([xw−1,xw−2,...,x0])B2Tw+k([xw−1,...,xw−1,xw−2,...,x0])=B2Tw([xw−1,xw−2,...,x0])
截断数字
无符号数的截断结果
B2Uk([xk−1,xk−2,...,x0])=B2Uw([xw−1,xw−2,...,x0]) mod 2kB2Uk([xk−1,xk−2,...,x0])=B2Uw([xw−1,xw−2,...,x0]) mod 2k有符号数补码的截断结果
B2Tk([xk−1,xk−2,...,x0])=U2Tw(B2Uw([xw−1,xw−2,...,x0]) mod 2k)B2Tk([xk−1,xk−2,...,x0])=U2Tw(B2Uw([xw−1,xw−2,...,x0]) mod 2k)整数运算
无符号数加法
x+uwy={x+yx+y−2wx+y<2w2w≤x+y<2w+1x+wuy={x+yx+y<2wx+y−2w2w≤x+y<2w+1有符号数补码加法
x+twy=U2Tw(T2Uw(x)+uwT2Uw(y))=U2Tw[(xw−12w+x+yw−12w+y) mod 2w]=U2Tw[(x+y) mod 2w]=⎧⎩⎨⎪⎪x+y−2wx+yx+y+2w2w−1≤x+y−2w−1≤x+y<2w−1x+y<−2w−1正溢出正常负溢出x+wty=U2Tw(T2Uw(x)+wuT2Uw(y))=U2Tw[(xw−12w+x+yw−12w+y) mod 2w]=U2Tw[(x+y) mod 2w]={x+y−2w2w−1≤x+y正溢出x+y−2w−1≤x+y<2w−1正常x+y+2wx+y<−2w−1负溢出有符号数补码的非
−twx={−2w−1−xx=−2w−1x>−2w−1−wtx={−2w−1x=−2w−1−xx>−2w−1无符号数乘法
x∗uwy=(x⋅y) mod 2wx∗wuy=(x⋅y) mod 2w有符号数补码乘法
x∗twy=U2Tw((x⋅y) mod 2w)x∗wty=U2Tw((x⋅y) mod 2w)乘以常数
B2Uw+k([xw−1,xw−2,...,x0,0,...,0])=∑i=0w−1xi2i+k=[∑i=0w−1xi2i]⋅2k=x⋅2kB2Uw+k([xw−1,xw−2,...,x0,0,...,0])=∑i=0w−1xi2i+k=[∑i=0w−1xi2i]⋅2k=x⋅2k对于某个常数KK的表达式x∗Kx∗K生成代码,编译器会将KK的二进制表示为一组0和1交替的序列[(0...0)(1...1)(0...0)(1...1)][(0...0)(1...1)(0...0)(1...1)]
考虑一组从位位置nn到位置mm的连续的1(n≥mn≥m),有两种形式来计算
(x<<n)+(x<<n−1)+…+(x<<m)(x<<n)+(x<<n−1)+…+(x<<m)
(x<<n+1)−(x<<m)(x<<n+1)−(x<<m),当nn为最高有效位−(x<<m)−(x<<m)
除以2的幂
无符号数除以2的幂
B2Uw−k([xw−k−1,xw−k−2,...,x0])=∑i=0w−k−1xi2i=[∑i=kw−1xi2i]/2k=x/2kB2Uw−k([xw−k−1,xw−k−2,...,x0])=∑i=0w−k−1xi2i=[∑i=kw−1xi2i]/2k=x/2k有符号数补码除以2的幂
B2Tw−k(T2Bw(x)/T2Bw(2k))=∑i=0w−k−1xi2i+(2k−1)/2k=[∑i=kw−1xi2i]/2k+(2k−1)/2k=(x+2k−1)/2kB2Tw−k(T2Bw(x)/T2Bw(2k))=∑i=0w−k−1xi2i+(2k−1)/2k=[∑i=kw−1xi2i]/2k+(2k−1)/2k=(x+2k−1)/2k浮点数
二进制小数
形如bmbm−1bm−2...b1b0.b−1b−2...b−n+1b−nbmbm−1bm−2...b1b0.b−1b−2...b−n+1b−n的表示法,其中每个二进制数字或者位,bibi的取值范围是0和1,则b=∑i=−nmbi2ib=∑i=−nmbi2i
符号
.变为了二进制的点,点左边的位的权是2的非负幂,右边是负幂
小数的二进制表示法只能表示那些能够被写成x×2yx×2y的数,其它值职能被近似
IEEE浮点表示
使用V=(−1)s×M×2EV=(−1)s×M×2E的形式表示一个数符号ss决定这个数是负数(1)还是整数(0)
阶码EE的作用是对浮点数加权,权重是2的EE次幂
尾数MM是一个二进制小数,范围是1∼2−ϵ1∼2−ϵ,或者0∼1−ϵ0∼1−ϵ
将浮点数的位表示划分为三个字段,分别编码
1位的符号位ss编码符号ss
kk位的阶码字段exp=ek−1...e1e0exp=ek−1...e1e0编码阶码EE
nn位的小数字段frac=fn−1...f1f0frac=fn−1...f1f0编码尾数MM
值的表示
规格化的值s | exp | frac |
---|---|---|
s | 非0 && 非全1 | frac |
小数字段fracfrac解释为描述小数值ff,其中0≤f<10≤f<1,其二进制表示为0.fn−1fn−2...f1f00.fn−1fn−2...f1f0,尾数M=1+fM=1+f,这种方式叫做隐含以1开头的表示,MM的二进制表示为1.fn−1fn−2...f1f01.fn−1fn−2...f1f0
非规格化的值
s | exp | frac |
---|---|---|
s | 0 | frac |
尾数M=fM=f
提供了一种表示0的方法。+0.0的浮点表示的位模式为全0,-0.0的服点表示为符号位为1,其它为0
可以表示非常接近于0.0的数,并且是均匀接近于0.0,叫做逐渐溢出
特殊值
无穷大
s | exp | frac |
---|---|---|
s | 全1 | 0 |
尾数MM全为0
符号ss为0的时候表示+∞+∞,符号ss为1的时候表示−∞−∞
能够表示溢出
NaN
s | exp | frac |
---|---|---|
s | 全1 | 非0 |
尾数MM非0
不是一个数
标准浮点格式
单精度(32=1+8+23)s | exp | frac |
---|---|---|
(31:31) | (30:23) | (22:0) |
s | exp | frac |
---|---|---|
(63:63) | (62:52) | (51:0) |
舍入
向偶数舍入四舍六入五成双
向零舍入
向下舍入
向上舍入
浮点运算
浮点加法
可交换x+fy=y+fxx+fy=y+fx
大多浮点数有加法的逆元,无穷和NaN是例外
不可结合
单调性
a≥b→x+a≥x+ba≥b→x+a≥x+b
浮点乘法
可交换单位元为1.0
不可结合
不可分配
单调性
a≥b and c≥0→x∗fa≥x∗fba≥b and c≤0→x∗fa≤x∗fba≠NaN→a∗fa≥0(1)(2)(3)(1)a≥b and c≥0→x∗fa≥x∗fb(2)a≥b and c≤0→x∗fa≤x∗fb(3)a≠NaN→a∗fa≥0
相关文章推荐
- 《深入理解计算机系统》笔记一:信息的表示与处理(1)——基本数据类型与字节序
- 信息的表示和处理
- 深入理解计算机系统:信息的处理与表示(一)基础
- 漫谈计算机基础之信息的处理与表示(1)
- 深入理解计算机系统学习之信息的表示和处理
- 深入理解计算机系统--第二章(信息的表示和处理)
- CSAPP 第二章 信息的表示和处理
- 信息的表示和处理
- 【计算机系统学习-信息表示和处理】【二、整数表示】
- 信息的表示与处理
- 2章 信息的表示和处理
- 信息的表示与处理(一)
- 信息的表示和处理
- 信息的表示和处理
- 笔记:第2章 信息的表示和处理
- 深入理解计算机系统--信息表示和处理
- 《深入理解计算机系统》笔记一:信息的表示与处理(2)——整数的表示
- 信息的表示和处理 第三周9.28~10.4
- [深入理解计算机系统]第二章-信息的表示与处理
- 计算机系统 笔记(2) 信息的表示和处理