C语言的学习(3)

C语言中的运算符

  1. 表达式: 由单个或多个操作数、运算符组成的符合C语言规则的式子

  2. 左值:左值是一种状态,表示一块内存是否可以进行写入操作(赋值),如果一块内存允许被赋值,称为这块内存位左值。 允许出现在赋值号左侧的,称之为左值

  3. 右值:右值是一种状态,表示一块内存是否可以进行读取操作(读值),如果一块内存允许被读取,称为这块内存位右值。 允许出现在赋值号右侧的,称之为右值

  4. 学习运算符的时候,学习什么?

    1. 运算规则
    2. 操作数个数
    3. 运算符的结合性
    4. 优先级

算数运算符

  • +,-,*,/,%,++,–
    • +,表示加法,二元运算符,从左到右
    • -,表示减法,二元运算符,从左到右
    • *,表示乘法,二元运算符,从左到右
    • /,表示除法,二元运算符,从左到右
    • %, 表示取余,二元运算符,从左到右
    • ++,自增运算符,一元运算符 (实际操作中不允许在一个表达式中对一个变量进行多次自增、自减操作)(其中的操作数要能被修改)
    • 同样还有自减运算符

C语言中,两个整数进行算术运算,结果为整型(结果会自动取整)
一个整数与一个浮点数进行(+、-、*、/)运算,结果为浮点数
C语言的取整规则:向0取整

自增运算符

1.前自增运算符(前++)
  • 例如: ++操作数
  • 先对操作数进行加1操作,再去去操作数的值
2.后自增运算符(后++)
  • 例如 操作数++
  • 先取操作数的值,,本行语句执行完成之后在加1

自减运算符

  • 与自增运算符操作相同

赋值运算符

  • 语法形式 : 操作数1 = 操作数2
  • 把操作数2的值赋值给操作数1
  • 操作数1必须是左值

复合赋值运算符

  • 算数复合赋值运算符 += 、-= 、*= 、 /= 、%=
    • 例如 += :二元运算符,从右到左
int a = 10; a += 10; 
//在变量a上加10在赋值给a
  • 位运算复合赋值运算符:&= |= ~= <<= >>=
    • 运算规则同算数复合赋值运算符

关系运算符(二元运算符、从左到右)

  • 包括 > , < , >= , <= , == , !=
  • 要注意的是:
    • 在运算时: 0:表示假 非0表示真
    • 在结果中: 0:表示假 1表示真

逻辑运算符

  • 逻辑与 :&&
    • 真 && 真 => 真
    • 真 && 假 => 假
    • 假 && 真 => 假
    • 假 && 假 => 假

逻辑与的短路问题;当左操作数结果为假时,该操作的结果肯定是假,所以为了减少运算右操作数不执行

  • 逻辑或 : ||
    • 真 || 真 => 真
    • 真 || 假 => 真
    • 假 || 真 => 真
    • 假 || 假 => 假

逻辑或的短路问题:当左操作数结果为真时,该数的结果肯定是假,所以为了减少运算右操作数不执行

  • 逻辑非 : !
    • !真 => 假
    • !假 => 真

条件运算符

  • [操作数1] ? [操作数2] : [操作数3]

判断[操作数1]的结果,如果结果为真时,执行[操作数2],并把[操作数2]的结果作为整个的结果;如果结果为假时,执行[操作数3],并把[操作数3]的结果作为整个的结果

#include <stdio.h>
int main(void)
{
	int a;
	scanf("%d", &a);
	a >= 0 && a <= 100 ? printf("合法\n") : printf("不合法\n");
	printf("%s\n", a>=0&&a<=100 ? "合法" : "不合法");
	printf(a>=0&&a<=100 ? "合法\n" : "不合法\n");
    return 0;
}

位运算符

对内存中每一位进行操作的运算符

  • 位与(&):两个操作数,按位进行与运算
    • 3 & 4 => 0011 & 0100 => 0000 => 0
  • 位或(|):两个操作数,按位进行或运算
  • 位非(~):对操作数按位进行非运算 0->1 1->0
  • 位异或(^):对操作数按位进行异或运算
    • 0 异或 0 => 0
    • 1 异或 0 => 1
    • 0 异或 1 => 1
    • 1 异或 1 => 0

一个数位异或另一个数两遍,则该数不变

  • 左移(<<):将 [操作数1] 整体往左移动 [操作数2] 位,所有位整体左移,低位补0,如果是有符号数,符号位会被数据位填充
    • 操作数1 << 操作数2
    • 对于正整数,相当于[操作数]乘以2的[操作数2]次方
    • 对于负整数,C语言没有给出定义,结果是未定义的
  • 右移(>>):将 [操作数1] 整体往右移动 [操作数2] 位
    • 对于正整数,相当于 [操作数1] 整除2的 [操作数2] 次方
    • 对于负整数,C语言没有给出定义,结果是未定义的
    • 大部分编译器,对于负数右移运算,符号位补1,来实现负整数整除2的效果

逗号运算符 ,

  • 优先级最低的运算符,二元运算符,从左到右
  • 操作数1,操作数2
  • 先执行操作数1,再执行操作数2,然后把操作数2作为整个表达式的结果

括号运算符():能够用来改变优先级

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值