第 6 章 数据类型
6.5 获取数据存储大小
sizeof 运算符,可以计算出指定数据的字节大小
结果是 size_t 类型的数据,对应的格式占位符是 %zu
使用说明:
计算指定数据的字节大小
1、sizeof 和 数据类型名称 一起使用 eg:
printf("char:%zu \n",sizeof(char));
2、sizeof 和 变量 可以一起使用 eg:
printf("num占用的存储长度: %zu \n", sizeof num );
//变量(常量同理)可以省略小括号,数据类型不可以省略(因为是特殊字符)
3、sizeof 和 常量 可以一起使用 eg:
printf("%zu \n", sizeof 8.8L);
使用变量将 sizeof 的计算结果存下来
size_t a = sizeof 3.4; printf("%zu \n", a);
6.6 数据类型转换
① 自动类型转换
1. 运算过程中的自动类型转换 (窄类型->宽类型)
① 不同类型的整数之间: ① 窄类型->宽类型 ② 有符号 -> 无符号 ③ char 和 short 都会转为 int 再运算
② 不同类型的浮点之间: 精度小->精度大
③ 整数和浮点之间:整数 -> 浮点
2. 赋值过程中的自动类型转换
给变量赋值的时候,值会自动转为变量的类型;
可能会发送宽类型转窄类型,造成精度损失
eg:/ 3000 补码:00000000000000000000101110111000
// 将 3000 存到 8bit 中,存后8位 1011 1000
——> 反码:1011 0111——> 源码:1100 1000
注:计算机上存储的是 补码,计算之后还是补码,读取显示时:需要把补码转化位原码
② 强制类型转换
(数据类型) 数据
注:当 数据 为一个表达式时,应改变表达式中其中一个 元 的数据类型
第 7 章 运算符
运算符: 运算符是一种特殊的符号,用于数据的运算、赋值和比较等。
操作数: 运算符运算的数据。
表达式: 表达式指的是一组操作数、运算符的组合,表达式一定具有值 ,一个变量一个常量也是表达式。
运算符4要素: 含义和功能、操作数个数、所组成表达式的值、该运算符有无副作用
运算符分类(按操作数个数): 一元运算符、二元运算符、三元运算符
运算符分类(按功能): 算术运算符、关系(比较)运算符、逻辑运算符、位运算符、赋值运算符、其他运算符
7.1 算术运算符
1. 正号、负号(+ , -) ——无副作用
正号: 一元运算符; 所组成表达式的值:操作数作为表达式的值; 无副作用
负号: 一元运算符: 所组成表达式的值:操作数取反作为表达式的值;无副作用
2. 加、减、乘、除(+,-,*,/) ——无副作用
二元运算符、无副作用
3. 取余(取模)(%)
① 表达式的值的符号(正负)与第一个操作数一致
② 取余运算符的操作数必须都是 整数
-
递增、递减(++,--) ——有副作用
① 递增、递减运算符可以在操作数前面,也可以在后面
② 运算符在前在后对操作数的副作用是 相同的
③ 表达式的值:
如果运算符在后(n++),取操作数自增或自减之 前 的值作为表达式的值如果运算符在前(++n),组操作数自增或自减之 后 的值作为表达式的值
特殊使用说明:
复杂表达式中的两个子表达式都带有副作用,且副作用针对同一个变量:
C标准未作出规定,未规定计算顺序,由编译器自行决定
//强烈不建议写该形式
eg: s = (++ n) + (++ n);
printf("s=%d", s); //无法确定输出的值
注意:带有副作用的运算符要求 操作数 必须是 变量的形式!
7.2 关系(比较)运算符
1. 包括: >、 >=、 <、 <=、 ==、 !=
2. 都是 2 个操作数
3. 表达式的值是 0 或者 1,是 int 类型
7.3 逻辑运算符
真表示的是 非零;假表示的是 0
1. 逻辑与 && // 可以称为and、并且
表达式的值: 两个操作数都为真(非0),表达式的值才是1,否则是0。
逻辑与短路: 如果第一个操作数为假,第二个操作数直接不会执行
2. 逻辑或 ||
表达式值: 两个操作只要一个为真,表达式值就是1,只要两个操作数都为假,表达式的值才是0
逻辑或短路:如果第一个操作数为真,第二个操作就不会执行
3. 逻辑非 !
一元运算符
表达式的值:操作数为真,表达式的值是0,操作数为假,表达式的值是1
7.4 位运算符
计算机上存的是补码,用补码计算后需转换为原码
1. 按位与:&; 按位或:|; 按位异或:^
2. 按位取反: ~
3. 按位左移: <<; 按位右移: >>
【左移 值变大,(*2的移动位数的次方);右移 值变小,(/2的移动位数的次方)】
/**
* 98 向左移动2位 9800 向左移动8位 98*10^8
* 192 向右移动1位 19.2
*/
总结
数据类型转换
1. 自动类型转换(隐式转换)
1.1 运算过程中
① 整数之间:窄类型->宽类型;有符号->无符号; char和short运算中转为int
② 浮点之间:精度小—>精度大
③ 整数和浮点数: 整数->浮点
1.2 赋值过程中
2. 强制类型转换(显示转换)
(类型名)
运算符
1. 运算符4要素
功能、操作数个数、所组成的表达式的值、有无副作用
2. 算术运算符
+ - * /
%
+ -
++ --
3. 关系(比较)运算符
> >= < <=
== !=
4. 逻辑运算符
&&
||
!
5. 位运算符
& | ^
~
<< >>
附录
再 tasks.json 中添加,提高警告等级:
"-Wconversion",
"-Wextra",
标签:类型转换,03,操作数,数据类型,运算符,sizeof,表达式
From: https://www.cnblogs.com/petard/p/18118193