C语言--整形升级&寻常算术转换

【三个概念】

1.表达式:

  由运算符、变量和常量组成的具有一个确定结果(值)的一个式子。
  -->算术表达式:如 x + 5 * y
  -->关系表达式:如 x >= 5, x == 8
  -->逻辑表达式:与、或、非,&& || ~
  -->赋值表达式:如 x = y +7
  -->条件表达式:如 x > y ? 1 : 0
  -->逗号表达式:有逗号运算符的表达式
  求解表达式:①混合运算规则;②优先级规则;③ 结合性规则。
  

2.语句:

  指的是当程序运行时执行某个动作的语法结构。它改变变量的值,产生输出,或处理输入。C语言包括4类语句:
  -->表达式语句:末尾加上分号,expression;如,函数调用语句和赋值语句
  -->语句块:由大括号{}括起来的一系列语句
  -->空语句:只有一个分号
  -->控制语句:3类,循环语句,选择/条件语句,特殊语句(return,continue,break)

3.算术运算:

  二元算术运算符:加减乘除取模,+ - / * %
  一元算术运算符: + -,强调数的正负


【整形升级】

  也称类型提升,是指:
  char, shaort int或者int型位段(bit-field),包括它们的有符号或无符号变型,以及枚举类型,可以使用在int或unsigned int的[!表达式!]]中。
  如果int可以完整表示源类型的所有值,那么该源类型的值就转换为int,否则转换为unsigned int。

【寻常算术转换】

  当执行[!算术运算!]时,操作数的类型如果不同,就会发生转换。
  规则:
    ①若其中一个是long double类型,另一个也被转换成long double;
    ②若其中一个是double类型,另一个也被转换成double;
    ③若其中一个是float类型,另一个也被转换成float。
    若不满足上述三条,则两个数进行整型升级:
    ①若其中一个是unsigned long int类型,另一个也被转换成unsigned long int;
    ②若其中一个是long int类型,另一个是unsigned int,
    如果long int能够完整表示unsigned int的所有值,那么unsigned int转换为long int,
    如果long int不能够完全表示unsigned int所有值,那么两个操作数都被转换成unsigned int。
    ③若其中一个是 long int 类型,另一个也被转换成long doublelong int;
    ④若其中一个是 unsigned int 类型,另一个也被转换成unsigned int;
    ⑤若以上四条都不满足,则两个数都转换成 int。

【K&R C和ANSI C区别】

  K&R C:无符号保留原则,当一个无符号类型与int或更小的整型混合使用时,结果类型是无符号类型。
  ANSI C:值保留原则,操作数类型不同就进行转换,朝着浮点精度更高,长度更长的方向转换。

【总结】

  通常情况下,在对int类型的数值作运算时,CPU的运算速度是最快的。在x86上,32位算术运算的速度比16位算术运算的速度快一倍。
  C语言是一个注重效率的语言,所以它会作整型提升,使得程序的运行速度尽可能地快。
  因此,你必须记住整型提升规则,以免发生一些整型溢出的问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值