C语 数据类型 运算符 表达式
- C语 数据类型
- 整型有 基本整型 短整型 长整型 无符号整型 无符号短整型 无符号长整型
- 实型(又称浮点型)有 单精度实型 双精度实型
常量与变量- 整型常量
- 实型常量
- 字符型常量
变量- 整体变量
- 整体变量的分类:
- 整体变量在内存中占用的内存字节数和值域:
- 整形变量的定义
实型(浮点型)变量字符变量变量赋初值各类数值型数据间混合运算- 保值转换
C语言的运算符和表达式- 掌握方法:
1.基本算数运算符2.表达式和算术表达式- 表达式求值规则:
3.强制类型转换- 格式:
4.自增(++) 自减(–)5.关系运算符和关系表达式6.逻辑运算符和逻辑表达式7.赋值运算符和赋值表达式- 1.赋值运算:
- 2.复合赋值运算:
- 3.赋值运算:
8.条件运算符和条件表达式- 一般格式:
- 运算规则:
- 运算符的优先级别与结合性:
9.逗号运算符和逗号表达式- 一般格式:
- 求解过程: 从左至右, 依次计算各表达式的值, 最后 "表达式n" 的值即为整个逗号表达式的值
- 注意: 并不是任何时候出现逗号运算符都是逗号运算符, 大多情况逗号仅用于分隔符
10.位逻辑运算- 按位逻辑运算:
- 说明:
参与运算时, 操作数都必须首先转换成二进制数, 然后再执行相应的按位运算
按位取反运算符的优先级别与其它单目运算符相同, 运算自右向左进行, 双目&运算符的优先级高于 | 运算符, | 运算符高于 ^ 运算符
位双目运算符的优先级别低于关系运算符, 高于逻辑运算符, 运算自左向右进行
11.位逻辑运算和位运算赋值运算符位移运算符:
操作符
名称
运算规则
说明
实际操作
<<
左移
a << b, a左移b位
使操作各位左移, 低位补0, 高位移出舍去
操作数乘以2ⁿ (n位左移的位数)
>>
右移
a >> b, a右移b位
使操作各位右移, 移出低位舍去
操作数除以2ⁿ (n位右移的位数)
说明:
高位: 对无符号和有符号中的正数
补0: 有符号中的负数, 取决于所使用的系统, 补0的称为”逻辑右移”
补1: 称为 “算数右移”
位移 <<, >>同级, 它们的优先级别较高, 仅次于算术双目运算符, 算数方向从左向右
左移运算符: 可以把一个数的各个二进制位全部左移若干位
右移运算符: 移动到右端低位被舍弃, 对无符号数, 高位补0
12.位运算符赋值运算符
所有位运算赋值运算符符优先级别向同, 与赋值优先级别相同, 运算方向自右向左运算
位运算赋值运算符:
操作符
名称
运算规则
说明
&=
位与赋值
a &= b等价于 a = a & b
操作数均为整数
∣=
位或赋值
a ∣= b等价于 a = a ∣ b
操作数均为整数
^=
按位异与赋值
a ^= b等价于 a = a ^ b
操作数均为整数
<<=
位左移赋值
a <<= b等价于 a = a << b
操作数均为整数
>>=
位右移赋值
a >>= b等价于 a = a >> b
操作数均为整数
运算符的优先级与结合性运算符的优先级与结合性:
优先级
运算符
含义
运输类型
结合性
1 (最高)
()[]->.
园括号, 函数参数列表数组元素下标指向元素成员结构体成员
自左至右
2
!~++–(类型)*&sizeof
逻辑非按位取反自增 1自减 1求负强制类型转换指针运算符求地址运算符长度运算符
单目运算
自右至左
3
*/%
乘法除法求余运算符
双目运算
自左至右
4
+-
加法运算符除法运算符
双目运算
自左至右
5
<<>>%
左移运算符右移运算符
位移运算
自左至右
6
<<=>>=
小于小于等于大于大于等于
关系运算
自左至右
7
==!=
等于不等于运算符
关系运算
自左至右
8
&
按位与
位运算
自左至右
9
^
按位异或
位运算
自左至右
10
∣
按位或
位运算
自左至右
11
&&
按位与
逻辑运算
自左至右
12
∣∣
按位或
逻辑运算
自左至右
13
? :
条件运算
三目运算
自右至左
14
=+=-=*=/=%=>>=<<=&=^=!=
赋值运算赋值
双目运算
自右至左
15
,
逗号运算 (顺序求值)
顺序运算
自左至右
11.位逻辑运算和位运算赋值运算符- 位移运算符:
- 说明:
12.位运算符赋值运算符- 位运算赋值运算符:
运算符的优先级与结合性- 运算符的优先级与结合性:
C语学习笔记
C语 数据类型
基本数据类型: 整型 实型(又称浮点型) 字符型 三种
构造类型: 数组类型 结构体类型 检举类型 联合类型
指针类型: 指针是一种特殊的, 同时又是具有重要作用的数据类型, 其值用来表示某个变量在内存中的地址
空类型: 空类型 void用来声明函数的返回值类型为空(既不需要函数的返回值)
graph LR
A[" 数据类型 "]-->B[" 基本类型 "]
B[" 基本类型 "]-->U[" 整型 "]
B[" 基本类型 "]-->D[" 字符型 "]
B[" 基本类型 "]-->E[" 实型(浮点型) "]
A[" 数据类型 "]-->F[" 构造类型 "]
F[" 构造类型 "]-->G[" 数组类型 "]
F[" 构造类型 "]-->H[" 结构体类型 "]
F[" 构造类型 "]-->I[" 共有类型 "]
F[" 构造类型 "]-->J[" 检举类型 "]
A[" 数据类型 "]-->K[" 指针类型 "]
A[" 数据类型 "]-->L[" 空类型 "]
整型有 基本整型 短整型 长整型 无符号整型 无符号短整型 无符号长整型
实型(又称浮点型)有 单精度实型 双精度实型
| 类型关键字 |
长度/字节 |
取值范围 |
说明 |
| int |
2 |
-32 768~32 767 |
有符号的基本整型 |
| unsigned |
2 |
0~65 535 |
无符号的基本整型 |
| short |
2 |
-32 768~32768 |
有符号短整型 |
| unsigned short |
2 |
0~65 535 |
无符号短整型 |
| long |
4 |
-2 147 383 648~2 147 383 648 |
有符号长整型 |
| unsigned long |
4 |
0~4 294 967 295 |
无符号长整型 |
| float |
4 |
-3.4×10³⁸~3.4×10³⁸ |
单精度实型 |
| double |
8 |
-1.7×10³⁰⁸~1.7×10³⁰⁸ |
双精度实型 |
| char |
1 |
0~255 |
字符型 |
常量与变量
整型常量
十进制整数: 由数字19开头, 其余各位由09组成
八进制整数: 由数字0开头, 其余各位由0~7组成, 在书写时要加前缀 0 (零)
十六进制整数: 由数字 0x 或者 0X 开头, 其余各位由09与字母af (0X 开头为A~F)组成, 在书写时要加前缀 0x 或者 0X
实型常量
字符型常量
字符常量: 一对单引号括起来的单个字符 包括字符和字符之间的空格
字符串常量: 一对双引号括起来的字符序列 包括字符(字符串)和字符(字符串)之间的空格
字符串中字符的格式代表字符串的长度 长度为0的字符串(即一个字符都没有的字符串)称作: 空串
C语言规定: 在储存字符串常量时, 由系统在字符串末尾自动添加一个 \0 作为字符串的结束标志
变量
概念: 在程序运行过程中其值可以改变的量称为变量 变量要有变量名, 在内存中占有一定的存储单元, 储存单元存放的是该变量的值 所以每个变量要有 变量名 和 变量值 两要素
变量名: 每个变量都必须有一个变量名, 变量命名遵守标识符命名规则, 变量名应取见名知意
变量值: 在程序运行过程中, 变量值储存在内存中, 不同类型的变量占用的内存单元(字节)数不同 在程序中, 通过变量名来引用变量的值
总体概况: 变量名实际上是一个符合的地址, 在对程序编译连接时由系统给每一个变量名分配一个内存地址 在程序中从变量中取值, 实际上是通过变量名找到相应的内存地址, 从其储存单元中读取数据
整体变量
整体变量的分类:
整型变量分四类:
基本整型(int)
短整型(short[int])
长整型(long[int])
无符号整型
无符号整型(unsigned[int]) 只能用来储存无符号整数
无符号短整型(unsigned short) 只能用来储存无符号整数
无符号长整型(unsigned long ) 只能用来储存无符号整数
整体变量在内存中占用的内存字节数和值域:
16位操作系统 int占2个字节
32位操作系统 int占4个字节
long型 ≥ int型 ≥ short型
整形变量的定义
实型(浮点型)变量
单精度型: 类型关键字为float, 一般占4个字节(32位), 携带7个有效数字
双精度型: 类型关键字为double, 一般占8个字节(32位), 提供15个有效数字
字符变量
- 字符型: 类型关键字为char, 一般占1个字节内存单元
变量赋初值
各类数值型数据间混合运算
graph TB
A[" 低 "]-->B[" 高 "]
C[" float "]-->D[" double "]
E[" long "]-->D[" double "]
F[" unsigned "]-->E[" long "]
G[" int "]-->F[" unsigned "]
H[" char "]-->G[" int "]
I[" short "]-->G[" int "]
保值转换
- 若运算符两端操作类型不一致, 在运算前应先将类型等级较低的数据类型转换成等级较高的, 这种不同级别的转换叫保值转换
C语言的运算符和表达式
掌握方法:
运算符号
运算规则, 即所进行的操作
运算的优先级别
运算顺序
运算对象
运算结果
1.基本算数运算符
(加法) +
(减法/取负) —
(乘法) *
(除法) /
(求余) %
2.表达式和算术表达式
- 表达式的概念: 用运算符和括号将运算对象(常量, 变量和函数等)连起来的, 符合C语言语法规则都式子, 称为 表达式
- 简单表达式的概念: 将单个常量, 变量或函数构成的表达式, 称为 简单表达式
- 复杂表达式的概念: 除简单表达式的其他表达式称为 复杂表达式
表达式求值规则:
按运算符优先级高低顺序执行
算数运算符的结合方向: 从左至右
3.强制类型转换
格式:
(<要转换的数据类型名>) (<被转换的表达式>);
|
4.自增(++) 自减(–)
前置运算 运算符放在变量之前
后置运算 运算符放在变量之后
5.关系运算符和关系表达式
- 优先级由高到低: 关系运算符( < <= > >= ) 大于 赋值运算符( == != )
6.逻辑运算符和逻辑表达式
&&: 逻辑与(相当于 “并且”)
||: 逻辑或(相当于 “或者”)
!: 逻辑非(相当于 “否定”)
7.赋值运算符和赋值表达式
1.赋值运算:
2.复合赋值运算:
<变量> <双目运算符> = <表达式>;
<变量> = <变量>双目运算符(表达式);
|
3.赋值运算:
<变量> = [<复合赋值运算符>] = <表达式>;
|
8.条件运算符和条件表达式
一般格式:
<表达式1> ? <表达式2> : <表达式3>;
|
运算规则:
- 如果 “表达式1” 的值为非0(即逻辑真), 则运算符结果等于 “表达式2” 的值, 否则运算结果等于 “表达式3” 的值
运算符的优先级别与结合性:
- 条件运算符的优先级, 高于赋值运算符, 但低于关系运算符和算数运算符, 其结合性为 从右到左” (即右结合性)
9.逗号运算符和逗号表达式
一般格式:
<表达式1>, <表达式2>, ..., <表达式n>;
|
求解过程: 从左至右, 依次计算各表达式的值, 最后 "表达式n" 的值即为整个逗号表达式的值
注意: 并不是任何时候出现逗号运算符都是逗号运算符, 大多情况逗号仅用于分隔符
10.位逻辑运算
按位逻辑运算:
| 操作符 |
名称 |
运算规则 |
主要用途 |
| & |
按位与 |
对应位为1时才为1, 否则为0 |
将应该数的某(些)位置0, 其余位保留不变 |
| ∣ |
按位或 |
对应位为0时才为0, 否则为1 |
将应该数的某(些)位置1, 其余位保留不变 |
| ^ |
按位异或 |
对应位相同为0, 不同时为1 |
使一个数的某(些)位置1, 其余位保留不变 |
| ~ |
按位取反 |
各位翻转, 即1变0, 0变1 |
间接地构造一个数, 以增强程序的可移植性 |
说明:
参与运算时, 操作数都必须首先转换成二进制数, 然后再执行相应的按位运算
按位取反运算符的优先级别与其它单目运算符相同, 运算自右向左进行, 双目&运算符的优先级高于 | 运算符, | 运算符高于 ^ 运算符
位双目运算符的优先级别低于关系运算符, 高于逻辑运算符, 运算自左向右进行
11.位逻辑运算和位运算赋值运算符
位移运算符:
| 操作符 |
名称 |
运算规则 |
说明 |
实际操作 |
| << |
左移 |
a << b, a左移b位 |
使操作各位左移, 低位补0, 高位移出舍去 |
操作数乘以2ⁿ (n位左移的位数) |
| >> |
右移 |
a >> b, a右移b位 |
使操作各位右移, 移出低位舍去 |
操作数除以2ⁿ (n位右移的位数) |
说明:
高位: 对无符号和有符号中的正数
补0: 有符号中的负数, 取决于所使用的系统, 补0的称为”逻辑右移”
补1: 称为 “算数右移”
位移 <<, >>同级, 它们的优先级别较高, 仅次于算术双目运算符, 算数方向从左向右
左移运算符: 可以把一个数的各个二进制位全部左移若干位
右移运算符: 移动到右端低位被舍弃, 对无符号数, 高位补0
12.位运算符赋值运算符
- 所有位运算赋值运算符符优先级别向同, 与赋值优先级别相同, 运算方向自右向左运算
位运算赋值运算符:
| 操作符 |
名称 |
运算规则 |
说明 |
| &= |
位与赋值 |
a &= b等价于 a = a & b |
操作数均为整数 |
| ∣= |
位或赋值 |
a ∣= b等价于 a = a ∣ b |
操作数均为整数 |
| ^= |
按位异与赋值 |
a ^= b等价于 a = a ^ b |
操作数均为整数 |
| <<= |
位左移赋值 |
a <<= b等价于 a = a << b |
操作数均为整数 |
| >>= |
位右移赋值 |
a >>= b等价于 a = a >> b |
操作数均为整数 |
运算符的优先级与结合性
运算符的优先级与结合性:
| 优先级 |
运算符 |
含义 |
运输类型 |
结合性 |
| 1 (最高) |
() [] -> . |
园括号, 函数参数列表 数组元素下标 指向元素成员 结构体成员 |
|
自左至右 |
| 2 |
! ~ ++ – (类型) * & sizeof |
逻辑非 按位取反 自增 1 自减 1 求负 强制类型转换 指针运算符 求地址运算符 长度运算符 |
单目运算 |
自右至左 |
| 3 |
* / % |
乘法 除法 求余运算符 |
双目运算 |
自左至右 |
| 4 |
+ - |
加法运算符 除法运算符 |
双目运算 |
自左至右 |
| 5 |
<< >> % |
左移运算符 右移运算符 |
位移运算 |
自左至右 |
| 6 |
< <= > >= |
小于 小于等于 大于 大于等于 |
关系运算 |
自左至右 |
| 7 |
== !=
|
等于 不等于运算符
|
关系运算 |
自左至右 |
| 8 |
& |
按位与 |
位运算 |
自左至右 |
| 9 |
^ |
按位异或 |
位运算 |
自左至右 |
| 10 |
∣ |
按位或 |
位运算 |
自左至右 |
| 11 |
&& |
按位与 |
逻辑运算 |
自左至右 |
| 12 |
∣∣ |
按位或 |
逻辑运算 |
自左至右 |
| 13 |
? : |
条件运算 |
三目运算 |
自右至左 |
| 14 |
= += -= *= /= %= >>= <<= &= ^= != |
赋值 运算赋值 |
双目运算 |
自右至左 |
| 15 |
, |
逗号运算 (顺序求值) |
顺序运算 |
自左至右 |
作者: 我叫史迪奇
本文来自于:
https://sdq3.link/C-type-operator-operator.html博客内容遵循 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议