一、数据类型长度:
数据类型名称 | 关键字 | 所占字节 | 所占位数 | 数值范围 |
---|---|---|---|---|
有符号字符型 | char | 1 | 8 | -128~127 |
无符号字符型 | unsigned char | 1 | 8 | 0~255 |
有符号整型 | int | 2 | 16 | -32768~32767 |
无符号整型 | unsigned int | 2 | 16 | 0~65535 |
有符号长整型 | long | 4 | 32 | - 2147483648 ~ 2147483647 |
无符号长整形 | unsigned long | 4 | 32 | 0~ 4294967295 |
单精度浮点型 | folat | 4 | 32 | 约 -3.4E38~ +3.4E38 |
双精度浮点型 | double | 8 | 64 | 约 -1.7E308~ +1.7E308 |
1.说明
1.在日常编程过程中,有符号型(signed)和无符号型(unsigned)两种如果不是必须的,尽可能选无符号型,能有效省去符号位检测,减去CPU负担。
2.程序编译时,编译器会自动进行类型转换,比如将一个位型变量(bit)赋值给整型,则此变量会自动转换为整型值。如果为不同类型数据时,编译器会先将低级的数据类型转换为较高级的数据类型且运算后结果为高级数据类型。
那么指针长度是多少呢?其长度是不确定的,主要和CPU的位数有关,即指针大小实际上是由寻址宽度决定的。8位的和16位的指针长度分别为1字节和2字节,32位处理器则是4字节,而64位处理器则是8字节了。
二、运算符优先级以及结合性
优先级 | 运算符 | 含义 | 结合方向 |
---|---|---|---|
1 | ( ) | 圆括号 | 自左至右 |
[ ] | 下标运算符 | ||
. | 结构体成员运算符 | ||
-> | 指向结构体成员运算符 | ||
++ | 一元后置递增 | ||
-- | 一元后置递减 | ||
2 | ++ | 一元前置递增 | 自右至左 |
-- | 一元前置递减 | ||
+ | 正号 | ||
- | 负号 | ||
! | 一元逻辑非运算符 | ||
~ | 一元按位取反运算符 | ||
(类型) | 一元强制类型转换运算符 | ||
* | 指针运算符 | ||
& | 取地址运算符 | ||
sizeof | 按字节确定大小运算符 | ||
3 | * | 乘法运算符 | 自左至右 |
/ | 除法运算符 | ||
% | 求模运算符 | ||
4 | + | 加法运算符 | 自左至右 |
- | 减法运算符 | ||
5 | << | 按位左移运算符 | 自左至右 |
>> | 按位右移运算符 | ||
6 | < | 小于运算符 | 自左至右 |
<= | 小于等于运算符 | ||
> | 大于运算符 | ||
>= | 大于等于运算符 | ||
7 | == | 关系等于运算符 | 自左至右 |
!= | 关系不等于运算符 | ||
8 | & | 按位与运算符 | 自左至右 |
9 | ^ | 按位异或运算符 | 自左至右 |
10 | | | 按位或运算符 | 自左至右 |
11 | && | 逻辑与运算符 | 自左至右 |
12 | || | 逻辑或运算符 | 自左至右 |
13 | ? : | 三元条件运算符 | 自右至左 |
14 | = | 赋值运算符 | 自右至左 |
/= | 除后赋值 | ||
*= | 乘后赋值 | ||
%= | 取模后赋值 | ||
+= | 加后赋值 | ||
-= | 减后赋值 | ||
<<= | 左移后赋值 | ||
>>= | 右移后赋值 | ||
&= | 按位与后赋值 | ||
^= | 按位异或后赋值 | ||
|= | 按位或后赋值 | ||
15 | , | 逗号运算符 | 自左至右 |
说明:
1.同一级优先级的运算符,运算次序由结合方向确定。
优先级顺序大概可以记为:算术运算>关系运算>逻辑运算>赋值运算