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型。

经验分享 程序员 微信小程序 职场和发展