类型转换
- 自动类型转换
- 运算转换(编译器会自动把小类型转换为大类型)
int num = 10;
double vauble = 3.0;
double res = num / value;
- 赋值转换(将等号右边的类型转换为等号左边的类型)
int num = 10;
double vauble = num;
- 强制类型转换
int num = 10;
double res = (double)num;
赋值运算符
- 赋值运算符的结合性(右结合)和优先级
int number = 10;
// 赋值运算符优先级是14, 普通运算符优先级是3和4, 所以先计算普通运算符
// 普通运算符中乘法优先级是3, 加法是4, 所以先计算乘法
// number += 1 + 25; number += 26; number = number + 26;
number = 36;
number += 1 + 5 * 5;
printf("number = %i\n", number); // 36 }
sizeof 运算符
- 作用:可以用来计算一个变量或常量所占的字节内存数.
- 格式:
- sizeof( 变量\常量 );
sizeof(10);
char c = 'a'; sizeof(c);
- sizeof 变量\常量;
sizeof 10;
char c = 'a'; sizeof c;
- sizeof( 数据类型);
sizeof(float);
如果是数据类型不能省略括号
- sizeof 面试题
- sizeof()和+=、*=一样是一个复合运算符, 由sizeof和()两个部分组成, 但是代表的是一个整体
- 所以sizeof不是一个函数, 是一个运算符, 该运算符的优先级是2
- sizeof( 变量\常量 );
#include <stdio.h>
int main(){
int a = 10;
double b = 3.14;
// 由于sizeof的优先级比+号高, 所以会先计算sizeof(a);
// a是int类型, 所以占4个字节得到结果4
// 然后再利用计算结果和b相加, 4 + 3.14 = 7.14
double res = sizeof a+b;
printf("res = %lf\n", res); // 7.14
}
逗号运算符
-
在C语言中逗号“,”也是一种运算符,称为逗号运算符。 其功能是把多个表达式连接起来组成一个表达式,称为逗号表达式
-
逗号运算符会从左至右依次取出每个表达式的值, 最后整个逗号表达式的值等于最后一个表达式的值
-
格式:
表达式1,表达式2,… …,表达式n;
#include <stdio.h>
int main(){
int a = 10, b = 20, c;
// ()优先级高于逗号运算符和赋值运算符, 所以先计算()中的内容
// c = (11, 21);
// ()中是一个逗号表达式, 结果是最后一个表达式的值, 所以计算结果为21
// 将逗号表达式的结果赋值给c, 所以c的结果是21
c = (a + 1, b + 1);
printf("c = %i\n", c); // 21 }
三目运算符
- 条件运算符是C语言的唯一的三目运算符,它需要3个数据或表达式构成条件表达式
- 格式 :
表达式1?表达式2(结果A):表达式3(结果B)
- 求值规则:
- 如果"表达式1"为真,三目运算符的运算结果为"表达式2"的值(结果A),否则为"表达式3"的值(结果B)
示例:
int a = 10;
int b = 20;
int max = (a > b) ? a : b;
printf("max = %d", max);
输出结果: 20
等价于:
int a = 10;
int b = 20;
int max = 0;
if(a>b){
max=a;
}else {
max=b;
}
printf("max = %d", max);
- 注意点:
1.条件运算符的运算优先级低于关系运算符和算术运算符,但高于赋值符
2.条件运算符?和:是一个整体,不能分开使用
3.条件运算符的结合方向是从右至左
#include <stdio.h>
int main(){
int a = 10;
int b = 5;
// 先计算 a > b
// 然后再根据计算结果判定返回a还是b
// 相当于int max= (a>b) ? a : b;
int max= a>b ? a : b;
printf("max = %i\n", max); // 10
}
#include <stdio.h>
int main(){
int a = 10;
int b = 5;
int c = 20;
int d = 10;
// 结合性是从右至左, 所以会先计算:后面的内容
// int res = a>b?a:(c>d?c:d);
// int res = a>b?a:(20>10?20:10);
// int res = a>b?a:(20);
// 然后再计算最终的结果
// int res = 10>5?10:(20);
// int res = 10;
int res = a>b?a:c>d?c:d;
printf("res = %i\n", res);
}
网友评论