您现在的位置是:首页 >其他 >C/C++ leetcode刷题的各种小tips记录网站首页其他
C/C++ leetcode刷题的各种小tips记录
一、常见知识整理
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型。