一、常见知识整理
1. 运算符优先级和结合
优先级 运算符 结合性
1 ()(括号/函数运算符) [](下标运算符) .(成员选择(对象)) ->(成员选择(指针)) 从左到右
2 !(逻辑非) ~(按位取反) +(正) -(负) ++ -- *(取值运算符) &(取地址运算符) (type)(强制类型转换) 从右到左
3 *(乘) /(除) %(取余) 从左到右
4 +(加) -(减) 从左到右
5 <<(左移) >>(右移) 从左到右
6 >(大于) >=(大于等于) <(小于) <=(小于等于) 从左到右
7 ==(等于) !=(不等于) 从左到右
8 &(按位与) 从左到右
9 ^(按位异或) 从左到右
10 |(按位或) 从左到右
11 &&(逻辑与) 从左到右
12 ||(逻辑或) 从左到右
13 ?:(条件运算符) 从右到左
14 =(赋值运算符) /= *= %= += -= >>= <<= &= |= ^= 从右到左
15 ,(逗号运算符) 从左到右
2. 数据类型的字节数和数值范围
整数类型
类型 标识符 字节数 数值范围 表示方法
整形 无符号整型 int unsigned 4 32bit -2147483648 ~ 2147483647 0 ~ 4294967295 -2^31 ~ 2^31-1 0 ~ 2^32-1 0 0u
短整型 无符号短整型 short unsigned short 2 16bit -32768 ~ 32767 0 ~ 65535 -2^15 ~ 2^15-1 0 ~ 2^16 -1 -
长整型 无符号长整形 long unsigned long 4 32bit 2147483648 ~ 2147483647 0 ~ 4294967295 -2^31 ~ 2^31-1 0 ~ 2^32-1 0l 0ul
字符型 无符号字符型 char unsigned char 1 8bit -128 ~ 127 0 ~ 255 -2^7 ~ 2^7-1 0~2^8-1 -
浮点数类型
类型 标识符 字节数 指数位宽 尾数位宽 取值范围 表示方法
单精度 float 4 8bit 23bit -3.4×10^(38) ~ 3.4×10^(38) 0.0f
双精度 double 8 11bit 52bit -1.7×10^(308) ~ 1.7×10^(308) 0.0
二、省时间省空间的代码操作
1. 用位移操作代替乘除
乘/除2
x << 1 代替 x * 2
x >> 1 代替 x / 2
判断奇偶数
x & 0x1 == 1 代替 x % 2 == 1 (奇数)
x & 0x1 == 0 代替 x % 2 == 0 (偶数)
2. 求绝对值
int型变量n的求绝对值方法为
unsigned n1 = n > 0 ? n : (unsigned) ~n + 1
注意:考虑到int型变量的边界,n的最小值是-2147483648,最大值是2147483647,因此最小值取绝对值后对于int型是溢出的,因此要强制类型转换成unsigned型。