深入理解计算机系统:数值的存储

关于计算几种的存储方式,总结如下:

1、只有ASCII字符构成的文件称为文本文件,ASCII用一个字节表示一个字符(0-127),其他的所有文件成为二进制文件。每种语言都有自己的编码标准,有了表,计算机就能将任何的字符映射到计算机中,进行二进制的处理。

2、编译的四个阶段:预处理(.i文件)-》编译(.s汇编文件)-》汇编(.o文件)-》链接(可执行文件)。

3、如何判断机器是大端还是小端:

定义一个函数,以unsigned char *的数组指针为参数,依次传入intfloat等变量的地址,这时指针数组会把int看做一个4个字节的数组进行遍历输出,经过测试,win7采用的是小端方式,所谓大端就是大的在低地址,输出时俺正常的数输出。

4、交换操作:A = a^b, a= a^b,b=a^b;异或的基本属性:a^a=0,a^0=a;

5、int ival = 0x12345678 >> 32;相当于移动322=0位,当位移的范围超过类型的范围时,进行取模运算。

6、正数:在计算机中正常存储,负数:在计算机中一般存储的是补码,就是正数的反码+1。

7、无符号数转为有符号数:if < 0 2W+负数 else 一样。w为位数。

有符号数转为无符号数:if (w==1)  正数-2w else 一样。w为位数。

 其本质没有变化,只是在读取的时候,把第一位看做不同的符号。

8、类型的最小值=-类型的最大值-1

9、short sx = -12345;unsigned uy = sx;

转换过程,先把sx扩充至32位,在转换为unsigned类型,也就是说,先扩充位数,在进行类型的转换。

10、一定要注意比较两边的类型,很容易出现unsignedsigned的比较,导致出错。最好不适用无符号数。

11、无符号数加法溢出:直接取余。

有符号加法溢出:正溢出:x+y-2w,负溢出:x+y+2ww为位数。

补码非:补码的反码+1-5的补码非为5

12、无符号乘法:结果取余。

补码的乘法:两个有符号数相乘,先把有符号数转为无符号数,按照无符号乘法进行,再把无符号数转为有符号数。更为直接的方式是,把两个有符号数的结果,写出完整的补码形式,再截取最低位。

13、乘以常数,常常把常数转化为二进制,x*7=x*(8-1),进行移位(x<<n+(x<<n-1)或者(x<<n+1-(x<<m)

14、浮点数表示:

单精度:1:符号位,8:阶码,23:尾数。

双精度:1:符号位,11:阶码,52:尾数。

15、浮点数表示分类:

a)当阶码不全为0且不全为1时,属于规格化值:

M = 2单精度实际存储的阶码值-0111 1111127相当于10的几次方。

M = 2双精度实际存储的阶码值-011 1111 11111023相当于10的几次方。

尾数=实际存储的尾数的小数值+1

 = 尾数 x M

b)当阶码全为0时,非规格化值:

M =2 1-0111 1111

尾数 =实际存储的尾数的小数值

c)特殊值:

阶码全为1且尾数全为0,表示无穷大。

阶码全为1尾数不为0,便是NaN,即不是一个数。

posted @ 2011-12-02 10:17  magicdog  阅读(546)  评论(1)    收藏  举报