深入理解计算机系统读书笔记2

第二章 信息的表示和处理

要点:数值数据表示:进位计数制,定浮点表示,二进制编码

2.1 信息存储

  • 十六进制表示法,字数据大小(ISO C99 引入数据类型大小固定,不随机器设置和编译器变化);
  • 寻址和字节顺序(大端,小端表示法):不同类型的机器之间通过网络传送二进制数据时;C语言中,使用强制类型转换或union 时需要注意字节顺序。
  • 布尔代数,位运算,逻辑运算,移位运算。

“字”和 “字长”的概念不同
“字长”指数据通路的宽度。
”字长”等于CPU内部总线的宽度、运算器的位数、通用寄存器的宽度(这些部件的宽度都是一样的)
“字”表示被处理信息的单位,用来度量数据类型的宽度
字和字长的宽度可以一样,也可不同
例1:对于x86体系结构,不管字长多少,定义“字”的宽度都为16位,而从386开始字长就是32位了。
例2:对于MIPS 32体系结构,其字和字长都是32位。

image[7]

2.2 整数表示

  整型数据类型,补码,原码,反码,有符号数与无符号数之间的转换

C语言中的整数

image[6]

  代码示例

 1 void testINT()
 2 {
 3     int x =-1;
 4     unsigned u = 2147483648;
 5     printf("x = %u = %d \n",x,x);
 6     printf("u = %u = %d \n",u,u);
 7 
 8     if(-2147483648 < 2147483647)
 9         printf("-2147483648 < 2147483647 is true\n");
10     else
11         printf("-2147483648 < 2147483647 is false\n");
12     int i = -2147483648;
13     if(i < 2147483647)
14         printf("i < 2147483647 is true\n");
15     else
16         printf("i < 2147483647 is false\n");
17 
18     if(-2147483648-1 < 2147483647)
19         printf("-2147483648-1 < 2147483647\n");
20     else if(-2147483648-1 == 2147483647)
21         printf("-2147483648-1 == 2147483647\n");
22     else
23         printf("-2147483648-1 > 2147483647\n");
24 }
View Code

  以C90标准编译,会给出警告 

image[10]

c90 c99

x = 4294967295 = -1
u = 2147483648 = -2147483648
-2147483648 < 2147483647 is false
i < 2147483647 is true
-2147483648-1 == 2147483647

x = 4294967295 = -1
u = 2147483648 = -2147483648
-2147483648 < 2147483647 is true
i < 2147483647 is true
-2147483648-1 < 2147483647

  编译器处理常量时默认的类型

image[17]

1)在ISO C90标准下 ,2147483648为unsigned int型,因此“-2147483648 < 2147483647”按无符号数比较,10……0B比01……1B大,结果为false。在ISO C99标准下 ,2147483648为long long型,因此“-2147483648 < 2147483647”按带符号整数比较,10……0B比01……1B小,结果为true。
2)i < 2147483647 按int型数比较,结果为true。
3)-2147483647-1 < 2147483647 按int型比较,结果为true。

posted on 2018-04-11 20:58  flysong  阅读(254)  评论(0编辑  收藏  举报

导航