ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

C语言 常见操作符 和 表达式求值 (下)

C语言 常见操作符 和 表达式求值 (下) 一. 赋值操作符 和 复合赋值⚠️ 在C语言中赋值是从右向左写例如 int a 10;//把整数10赋值给a这个整型变量⚠️ 连续赋值 咱不是很推荐但还是要了解一下int a 3; int b 5; int c 0; c b a3;// a36 , b6 ,cb6 从右往左依次赋值上面这种逻辑顺序运行时不直观因此不是很推荐⚠️ 复合赋值int n 10; n n 5; //n 5 15 C语言中提供了复合赋值符方便我们编写代码这些赋值符有 1. 2. -3. /4. %5. *二. 单目运算符 、- - 、 、-只有一个操作数的操作符⚠️ 和 –① 是一种自增的操作符又分为前置 和 后置 前置 后置 都是让它的操作数自增1区别在于表达式的值不同。② - - 是一种自减的操作符又分为前置- - 和后置- - 前置- - 后置- - 都是让它的操作数自减1区别在于表达式的值不同。例子 ↓int n 10; n; //n n1 → n 1 11 //n ,也是如此 n 11⚠️ 后置 的口诀先赋值再自增 后置- - 也是如此int n 10; int m n;// m 10 ,n n1 → n 11⚠️ 前置 的口诀先自增再赋值 前置- - 也是如此int n 10; int m n;// n n1 → n 11 → m n 11③ 和 -这里的 是正号- 是负号都是单目操作符。运算符 对正负值没有影响是一个完全可以省略的运算符但是写了也不会报错。例子 ↓#includestdio.hintmain(){inta-5;printf(%d\n,-a);//5printf(%d\n,a);//-5//聪明的你可能已经发现这跟数学知识是一样的return0;}四. 表达式求值学会了上述操作符后我们使用操作符可以写出一些更加复杂的表达式比如3 4 * 55 * 6 / 2 计算顺序是啥① 操作符属性操作符属性优先级 和 结合性操作符属性链接点击一下蓝色区域可查看其实大家不用硬记我们也可以用来调节 或者查表毕竟常见的你比较熟悉了只是那些深奥的绕弯子。② 类型转换⚠️ 隐式类型转换又称自动类型转换由编译器自动完成无需程序员显示写出转换代码。它的目的是使表达式中的操作数类型兼容。⚠️ 整型提升表达式中的 char 、short 等 长度小于整型类型的长度在表达式计算的过程中会被自动提升为整型类型int 或 unsigned int然后参与运算 这里的类型提升就是整型提升。提升后保留值不变提升后的值与原值相等。例子 ↓#includestdio.hintmain(){charc100;shorts200;intrcs;//c 和 s 都被提升为int 后再进行加法。 r 100 200 300,提升后与原值一样printf(%d\n,r);return0;}⚠️ 常规算术转换变量的数据类型的长度是大于等于整型类型的长度时如果某个操作符的各个操作数属于不同的类型那么除非其中一个操作数的转换 为另一个操作数的类型否则操作就无法进行。例子 ↓#includestdio.hintmain(){intn10;floatf5.5f;floatrnf;//编译器自动把 n 转换为 float类型再与 f 进行加法运算//n 10.000000 , r 15.500000printf(%f\n,r);return0;}⚠️ 强制类型转换C语言的隐式类型转换都是按照既定的规则来转换的但是有时候我们需要更大程序上控制类型的转换所以就提供了强制类型转换。形式如下类型)表达式例子 ↓① int n (int)3.14;//n 3 ② int a 5; int b 2; float c (float)a / b; //2.500000五. 问题表达式C语言中没有规定子表达式的计算顺序如果一个表达式比较复杂包含了多个表达式那么子表达式的计算顺序不确定的情况下就会影响表达式的求值结果。例如 ↓a 10; c (b a 3) - (a 5);//结果是未定义的 ① a 5 , b 5 3 8 , c 3 ② b 13 , a 5 , c 8⚠️ 在不同的编译器底下结果各不一样说明这个代码本身就有问题。例子 ↓int i 1; int r (i) (i) (i); //在不同的编译器底下结果都不一样不信你试试
返回列表