深入理解计算机系统读书笔记2
第二章 信息的表示和处理
要点:数值数据表示:进位计数制,定浮点表示,二进制编码
2.1 信息存储
- 十六进制表示法,字数据大小(ISO C99 引入数据类型大小固定,不随机器设置和编译器变化);
- 寻址和字节顺序(大端,小端表示法):不同类型的机器之间通过网络传送二进制数据时;C语言中,使用强制类型转换或union 时需要注意字节顺序。
- 布尔代数,位运算,逻辑运算,移位运算。
“字”和 “字长”的概念不同
“字长”指数据通路的宽度。
”字长”等于CPU内部总线的宽度、运算器的位数、通用寄存器的宽度(这些部件的宽度都是一样的)
“字”表示被处理信息的单位,用来度量数据类型的宽度
字和字长的宽度可以一样,也可不同
例1:对于x86体系结构,不管字长多少,定义“字”的宽度都为16位,而从386开始字长就是32位了。
例2:对于MIPS 32体系结构,其字和字长都是32位。
2.2 整数表示
整型数据类型,补码,原码,反码,有符号数与无符号数之间的转换
C语言中的整数
代码示例
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }
以C90标准编译,会给出警告
c90 | c99 |
x = 4294967295 = -1 |
x = 4294967295 = -1 |
编译器处理常量时默认的类型
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。