sizeof运算符
- sizeof可以用来计算一个变量或常量所占的内存字节数
标准格式: sizeof(常量 or 变量); - 其他格式
sizeof 变量\常量; - int a = 10;
- sizeof a;
- sizeof 10;
sizeof( 数据类型); - sizeof(float);
sizeof不是一个函数, 是一个运算符, 该运算符的优先级是2
逗号运算符
- 在C语言中逗号“,”也是一种运算符,称为逗号运算符。 其功能是把多个表达式连接起来组成一个表达式,称为逗号表达式
-
逗号运算符会从左至右依次取出每个表达式的值, 最后整个逗号表达式的值等于最后一个表达式的值
关系运算符
默认情况下,我们在程序中写的每一句正确代码都会被执行。但很多时候,我们想在某个条件成立的情况下才执行某一段代码
这种情况的话可以使用条件语句来完成,但是学习条件语句之前,我们先来看一些更基础的知识:如何判断一个条件是否成立
- C语言中的真假性
在C语言中,条件成立称为“真”,条件不成立称为“假”,因此,判断条件是否成立,就是判断条件的“真假”
怎么判断真假呢?C语言规定,任何数值都有真假性,任何非0值都为“真”,只有0才为“假”。也就是说,108、-18、4.5、-10.5等都是“真”,0则是“假”
关系运算符的运算结果只有2种:如果条件成立,结果就为1,也就是“真”;如果条件不成立,结果就为0,也就是“假”
名称 | 符号 | 说明 |
---|---|---|
大于运算符 | > | 单目运算符,具有左结合性 |
小于运算符 | < | 单目运算符,具有左结合性 |
大于等于运算符 | >= | 单目运算符,具有左结合性 |
小于等于运算符 | <= | 单目运算符,具有左结合性 |
等于运算符 | == | 单目运算符,具有左结合性 |
非等于运算符 | != | 单目运算符,具有左结合性 |
优先级的问题
-
六个关系运算符中除了 == 和 != 比较低其他四个优先级都比他们高
-
如果碰到==和!=在一起就看结合性,因为优先级是一样的
注意点:无论是float还是double都有精度问题, 所以一定要避免利用==判断浮点数是否相等
逻辑运算符
逻辑非运算符 ! 单目运算符,具有右结合性
逻辑与运算符 && 双目运算符,具有左结合性
逻辑或运算符 || 双目运算符,具有左结合性
- 逻辑非
格式: ! 条件;
运算结果: 真变假,假变真 将最后的运算结果反过来如果是真就变假如果是假就变真 - 逻辑与
格式: 条件A && 条件B;
运算结果:一假则假
运算过程:只有条件A和条件B都是真的才会返回真
如果"条件A"成立,"条件B"不成立,结果就为0,即“假”
如果"条件A"不成立,不会再去判断"条件B"是否成立, 因为逻辑与只要一个不为真结果都不为真 - 逻辑或
格式: 条件A || 条件B;
运算结果:一真则真
运算过程:只要有一个条件为真就会返回真,只有当两个条件都为假时才会返回0
如果"条件A"不成立,接着再判断"条件B"是否成立, 如果"条件B"成立,结果就为1,即“真”
如果"条件A"成立, 不会再去判断"条件B"是否成立, 因为逻辑或只要一个为真结果都为真
三目运算符
- 条件运算符是C语言的唯一的三目运算符,它需要3个数据或表达式构成条件表达式
格式: 表达式1 ?表达式2(结果A):表达式3(结果B)
示例: 是否结婚 ? 结婚 : 不结婚;
-
求值规则:
如果"表达式1"为真,三目运算符的运算结果为"表达式2"的值(结果A),如果"表达式1"假的话,那么结果就是"表达式3"的值(结果B)
- 注意点
条件运算符的运算优先级低于关系运算符和算术运算符,但高于赋值符
条件运算符?和:是一个整体,不能分开使用
条件运算符的结合方向是从右至左
强制类型转换(显示转换) | 自动类型转换(隐式转换) |
---|---|
(需要转换的类型)(表达式) | 1.算数转换 2.赋值转换 |
- 强制类型转换(显示转换)
// 将double强制转换为int类型
int a = (int)10.5; - 算数转换
系统会自动对占用内存较少的类型做一个“自动类型提升”的操作, 先将其转换为当前算数表达式中占用内存高的类型, 然后再参与运算(也就是俗话说运算的时候小类型会被转化为大类型)
当前表达式用1.0是double类型占用8个字节, 2是int类型占用4个字节
所以会先将整数类型2转换为double类型之后再计算
double b = 1.0 / 2; - 赋值转换
赋值时左边是什么类型,就会自动将右边转换为什么类型
int a = 10.6;
注意点:
参与计算的是什么类型, 结果就是什么类型
类型转换并不会影响到原有变量的值