目录
移植与兼容
-
兼容性
- 要与老版ANSI兼任
-
老版编译器不区别标识符大小写
- 例如:Malloc与malloc一样
-
整数的大小
- long > int > short
- 但是不同的系统或编译器,long int short大小不确定
-
有符号与无符号
- 有符号扩展:1.正数前面加0 2.负数前面加0xff
- 无符号强转为有符号,16进制数值大小不变,但是符号可能改变了
-
移位操作
- 有符号数右移可能最高位补符号位
- 移位操作的范围是:0-n-1
- 移位 != 乘除以2,移位效率更高
-
null地址
- null地址,不能读写内容,判断是否为null,再操作读写(null指针只能赋值和比较)
-
除法
例如: p = a/b
r = a%b
1.a = p*b +r
2.a符号变了,p符号也变
3.b>0 , r>=0, r < b
正数的除法满足1、2、3条,负数除法满足1、2条
-
随机数的大小
-
小字母变大字母函数
例如:
#define toUpper(c) c+ ‘A’ – ‘a’
变成
#define toUpper(c) c >=’a’ && c <=’z’? c + ‘A’ – ‘a’ : c
变成
char toUpper(char c){ if(c >=’a’ && c <=’z’) return (c + ‘A’ – ‘a’); return c; }
-
先free在malloc
-
移植例子
- 例如 5转换位‘5’, 5 + ‘0’ = ‘5’
- 负变正符号位从1改为0,不行,因为正负数值范围不一致,char型来说,取值范围-128到127,负数为-1到-128,正数为1到127,正负数值范围不一致。