学到的知识点
- 大多数机器上,表达式(3.14+1e20)-1e20求得的值是0.0,表达式3.14+(1e20-1e20)求得的值是3.14。原因:整数的表示虽然只能编码一个相对较小的数值范围,但是这种表示是精确的;而浮点数虽然可以编码一个较大的数值范围,但是这种表示只是近似的。
- 信息储存:大多数计算机使用8位的块,或者字节作为最小可寻址的内存单位。
- 十六进制表示法:一个字节由8位组成,值域范围0~255
- 字数据大小:
字长为w位的机器而言,虚拟地址的范围为0~2w次方-1,程序最多访问2w次方个字节。
unsigned long、unsigned long int、long unsigned、long unsigned int表示一个意思。
- 寻址和字节顺序:小端法为最低有效字节在最前面的方式,大端法为最高有效字节在最前面的方式。
- 使用typedef来命名数据类型
- 字符串被编码为一个以null(值为0)字符结尾的字符数组。
- 二进制代码很少能在不同机器和操作系统组合之间移植,从机器的角度看,程序仅仅只是字节序列。
- 移位运算:区分算术移位和逻辑移位
- C语言浮点数:
int → float 不会溢出但有可能舍入
int/float → double 结果保留精确数值
double → float 可能溢出为±∞,由于精确度较小也有可能被舍入
float/double → int 向零舍入,可能溢出
错题整理
23.下面和代码可移植性相关的C语言属性有(ABC)
A .define
B .typedef
C .sizeof()
D .union
解析:#define可以定义宏使得变量可移植,typedef可以使得类型可移植,sizeof()使得不同类型长度可移植。
35.根据c89国际标准编译程序prog.c,下面正确的是(BC)
A .gcc prog.c
B .gcc -ansi prog.c
C .gcc -std=c89 prog.c
D .gcc -std=gnull prog.c
解析:课本p24 在国际c89标准编译程序中有gcc -ansi prog.c,gcc -std=c89 prog.c两条指令完成
12.short sx=-12345;
int x = sx;
unsigned ux = sx;
(ACD)
A .sx,x,ux的十六进制表示中的最后两个字节是0xcfc7
B .ux == 0xffffcfc7
C .ux == 0x0000cfc7
D .x == 0xffffcfc7
E .x == 0x0000cfc7
解析:课本p54 扩展一个数字的位,简单来说就是在不同字长的整数之间转换,而这种转换我们可以需要保持前后数值不变。当然将一个数据转换为字长更小的数据类型的时候,它的值肯定会发生变化。那么我们只能将较小的数据类型转换为较大的数据类型。比如将短整型short int 转换为整型 int。