操作符的属性:优先级、结合性
1.优先性:如果⼀个表达式包含多个运算符,哪个运算符应该优先执⾏
eg:3+7*5中,优先计算的是*再到+
2.结合性:两个运算符优先级相同,优先级没办法确定先计算哪个了,这时候就看结合性了
一般都是左到右执行,少数(eg:=)从右往左执行
(优先操作符在上一篇结尾处有常用的一些符号了,需要的自行查看,也可以网上查)
表达式求值
整型提升
1.讨论的是char ,short 使⽤之前被转换为普通整型(目的是为了更加精确)
//整形提升
//int main()
//{
// char a = 20;
// //00000000000000000000000000010100
// //char只存八字节
// //00010100 -a
//
//
// char b = 130;
// //00000000000000000000000010000010
// //10000010 -b
//
// char c = a + b;
// //00000000000000000000000000010100 -a
// //11111111111111111111111110000010 -b
// //11111111111111111111111110010110 截断 - 补码
// //10010110 -c
// //11111111111111111111111110010110 -提升 --补码变原码--取反+1
// //10000000000000000000000001101001
// //10000000000000000000000001101010
// // 01101010
// // %d打印有符号的整数
// //char类型的取值范围-128~127
// printf("%d", c);
//
// return 0;
//}
对于上面代码(复制去编译器更容易看,可以对齐数字):
1.a+b加完后内存存的仍然是补码
char只有存8个比特位
2.char类型的取值范围-128~127
3.char不一定是signed char,取决于编译器,vs上,char===signed char
优先级只能决定先×后-,而决定不了调用哪个先
eg:score = math() + english() * test()
有调用,但是不知道先哪个被调用先
总结:尽量不要写复杂的表达式