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

你可能感兴趣的:(c语言,开发语言)