基于linux下的C语言学习 3---C语言基本运算介绍

四、运算符、表达式和语句

  1. 算术运算符(+ 、 - 、 *、 /、 %、 ++ 、 --)
  • 加法运算符:+ ----------a+b
  • 减法运算符:- ----------a-b
  • 乘法运算符:* ----------a*b
  • 除法运算符:/ ----------a/b
  • 求余运算符:% ---------a%b
    例:a = 3,b= 2, a%b = 1 。 规定求余的两个操作数必须为整数。(常识)
  • 自增运算符:++ 理解为:a++等同于a +1,但是在某一表达式中,则计算规则不同。
例如:
1.a++举例
	a = 3; c = 0;d = 0; 
	c = a++;//运算完此语句后c = 3;
	d = a;  //运算完此语句后d = 4;
	由上面结果可以看出 a++语句在运行时,是先将a的值赋值给c而后进行a+1;
2.++a举例
	a = 3; c = 0;d = 0; 
	c = ++a;//运算完此语句后c = 4;
	d = a;  //运算完此语句后d = 4;
	由上面结果可以看出 ++a语句在运行时,是先运行a+1而后将结果值赋值给c;
  • 自减运算符:- - 理解为:a- -等同于a -1,但是在某一表达式中,则计算规则不同。具体规则同a++。

面试题1:已知以下信息,求执行结果

int j = 10; 
printf(%d%d%d%d%d%d”, j,  ++j,  j++,  j,  ++j,  j--);
结果为:                12  12     10   12  12    10

分析:
第一点:printf()的运算规则是从右往左执行的,涉及内容(栈空间的存储方式:先进后出,后进先出),因此printf()执行顺序为 :j-- => j++ => j => j++ => ++j => j。

第二点:对于优先级来说,后置++享有最高优先级,因此在运行的过程中,如果碰到后置++(- -),分析结果是多少则输出多少,碰到前置++(- -)或者不加不减(j)时,程序正常运算但是不输出结果,待整个表达式运算完毕后将最终值赋给含前置++(- -)或不加不减(j)进行输出。

如图示 
  j--  -> j = 10       输出        后j = j-1 = 9
  ++j  -> j = j+1 = 10 不输出      后j = 10
  j    -> j = 10       不输出      后j = 10
  j++  -> j = 10       输出        后j= j+1 = 11
  ++j  -> j = j+1=12   不输出      后j =12 
  j    -> j = 12       不输出      后j = 12
表达式执行完毕   最终 j = 12
上面所有不输出的结果  全部均输出 12 得到结果 12 12 10 12 12 10 
  1. 关系运算符 (>= 、 <= 、 == 、 != 、 > 、 <)
  • 大于等于: >= ----------a>=3
  • 小于等于 :<= ----------a<=3
  • 不等于: != ------------a!=3
  • 等于: == ----------------a==3
  • 大于 : > ---------------------a>3
  • 小于: < ----------------------a<3
  1. 逻辑运算符(&& 、||、 !)
  • 逻辑与 : &&
    (表达式1) && (表达式2)
    只有表达式1和表达式2 都为真,整个式子的值才为真,如果表达式1的值为假,表达式2不再计算

  • 逻辑或 :||
    (表达式1) || (表达式2)
    只要有一个表达式的值为真,整个式子的值就为真;两个式子都为假,整个式子才为假,如果表达式1的值为真,表达式2不再计算

  • 逻辑非 :!
    !(表达式)
    如果表达式为真,结果为假;如果表达式为假,结果为真

  1. 位运算符
  • 按位与 & : 按位进行与运算,两个1为1,有0则0。
    0101 & 0011 结果为 0001

  • 按位或 | :按位进行或运算,两个0为0,有1则1。
    0101 | 0011 结果为 0111

  • 按位取反 ! :按位取反,遇1变0,遇0变1.
    ! (0101) 结果为 1010

  • 按位左移 << :
    1.有符号数:符号位不变,左边移出的位舍弃,右边空出的位补0
    _______ 0 111010 <<3 结果为 0 010000
    _______ 1 001011 <<3 结果为 1 011000

    2.无符号数:左边移出的位舍弃,右边空出的位补0,且左移n位,相当于乘2的n次方
    _______0001 0110 <<2 结果为 0101 1000 等价于
    _______十进制数 22( 0001 0111 ) * 2 ^ 2 = 88 (0101 1000 )


  • 按位右移 >> :
    1.有符号数:符号位不变,右边移出的位舍弃,左边空出的位补符号位
    _______ 0 111010 >>3 结果为 0 000111
    _______ 1 001011 >>3 结果为 1 111001

    2.无符号数:右边移出的位舍弃,左边空出的位补0,且右移n位,相当于除2的n次方
    _______0001 0110 >>2 结果为 0000 0101 等价于
    _______十进制数 22( 0001 0111 ) */2 ^ 2 = 5 (0000 0101 ) 原本为5.5,但是换算二进制会直接取整数部分

  1. 其他运算符(简便格式)
  • 赋值 = : a = 1;---------------将1赋值给a
  • 加等 += : a += 1; -----------a = a+1;
  • 减等 -= : a -= 1; -------------a = a-1;
  • 乘等 *= : a * =2; -------------a = a * 2;
  • 除等 /= : a / = 2; -------------a = a / 2;
  • 求余缩写 %= : a %= 2; -------------a = a %2;
  • 逗号 , : (a=3 , a= 4, a = 5);-------- 从左往右运算 最终a = 5

五、控制流
下章分析

以上内容纯属个人观点,如有错误,欢迎纠正。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值