初识C语言 DAY6 【初识操作符】


前言

本文章总结于此视频


初识操作符

注:只讲解最基础的部分,不涉及二进制
C语言中操作符总共有10种,分别是:

算术操作符,移位操作符,位操作符,赋值操作符,单目操作符,关系操作符,逻辑操作符,条件操作符,逗号表达式,下标引用、函数调用和结构成员。

一 .算术操作符

算术运算符主要有+(加)、-(减)、*(乘)、\(除)、%(求余)这些,而加减乘这三个与我们数学中的无异。下面主要给大家讲解 / 和 % 这两个操作符

代码如下(示例):

#include <stdio.h>
int main()
{
	int a = 5;
	int b = 2;
	float c = 2.0;
	//除
	//1.操作符两边都是整型
	printf("%d\n", a / b);  //2
	//2.操作数有一边是浮点型
	printf("%f\n", a / c);  //2.5
 
	//求余(两边必须为整型,字符型也是特殊的整型)
	printf("%d", a % b);  //1
	return 0;
}

在C语言中除号两边都是整型则采取整数除法
若有一边为浮点型则会发生算术转换比如上图中a会转换为浮点型,浮点型之间的除法执行浮点数除法,因此结果为2.5。
例如:

#include <stdio.h>
int main()
{
	int a = 5;
	float c = 2.0;
	//2.操作数有一边是浮点型
	printf("%f\n", a / c);  //2.5
 		return 0;
}

注:%f 打印float浮点数据
%lf 打印double数据

   **求余(两边必须为整型,字符型也是特殊的整型)**
#include <stdio.h>
int main()
{
	int a = 5;
	int b = 2;
	//求余(两边必须为整型,字符型也是特殊的整型)
	printf("%d", a % b);  //1
	return 0;
}

二.逻辑操作符

  • && 逻辑与
  • || 逻辑或
  • ! 逻辑非

这里是引用

1.逻辑与

逻辑与是这么定义的

1 && 0 ----- 0
0 && 1 ----- 0
1 && 1 ----- 1

只有两个操作数都为非零(真)结果才为1(真)

2.逻辑或

逻辑或是这么定义的

1 || 0 ------ 1

0 || 1 ------ 1

0 || 0 ------ 0

只要两个操作数都为零(假)的时候结果才为0(假)

3.逻辑非

逻辑非是这么定义的

! 1 ------ 0

! 0 ------ 1

即1(真)取非则成0(假),0(假)取非则成1(真)

4.经典例题

下面有一道经典笔试题(from 360):

#include <stdio.h>
int main()
{
    int i = 0,a=0,b=2,c =3,d=4;
    i = a++ && ++b && d++;
    //i = a++||++b||d++;
    printf("a = %d\n b = %d\n c = %d\nd = %d\n", a, b, c, d);
    return 0;
}
//程序输出的结果是什么?

这道题的答案是:
在这里插入图片描述
有很多小伙伴可能就疑惑了,为什么不是1 3 3 5呢,而是1 2 3 4,这是因为在逻辑与中,有一个有意思的现象,我们称之为短路现象即当与左边的操作数为假的时候,整个表达式的结果就为假,后面的表达式就不进行计算了,什么意思呢?按本题思路来看,当a++为假的时候,整个表达式结果为0(假),如题这里a是后置++,且a的值恰好为0(假),因此后面的表达式就不进行运算,就得到了如上图的答案了。
同样,逻辑或也有这样的现象,当逻辑或的左边表达式结果为1(真),整个表达式的结果变为1(真),后面的表达式同样也不用参与运算。
————————————————

原文链接:https://blog.csdn.net/Nice_W/article/details/127515725
补充: i = a++||++b||d++时

#include <stdio.h>
int main()
{
    int i = 0, a = 0, b = 2, c = 3, d = 4;
   // i = a++ && ++b && d++;
   i = a++||++b||d++;
    printf("a = %d\n b = %d\n c = %d\nd = %d\n", a, b, c, d);
    return 0;
}
//程序输出的结果是什么?

程序输出的结果是什么?
在这里插入图片描述

注:

  • a++
  • ++a
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
    int a = 10;
    int b = a++;//后置++,先使用,后++ 
    //int b = a , a = a + 1
    printf("%d\n %d\n", b , a);     
    return 0;
}

运算方法:后置++,先使用,后++
int b = a , a = a + 1
++前置,先++,后使用
a = a + 1,int b = a

三.赋值操作符

C语言中的相等用两个等于号表示(“==”)。

int a = 0;

+= --------- a += 1; ----------- a = a + 1;

-= --------- a -= 1; --------- a = a - 1;

*= --------- a *= 1; --------- a = a * 1;

/= --------- a /= 1; --------- a = a / 1;

%= --------- a %= 1; --------- a = a % 1;

. >>= --------- a >>= 1; --------- a = a >> 1;

<<= --------- a <<= 1; --------- a = a << 1;

&= --------- a &= 1; --------- a = a & 1;

|= --------- a |= 1; --------- a = a | 1;

^= --------- a ^= 1; --------- a = a ^ 1;
————————————————

四.单目操作符

单目操作符就是只有一个操作数的操作符
(类型) 强制类型转换

#include <stdio.h>
int main()
{
    int a = (int)3.14;
        printf("%d\n", a);
    return 0;
}

运行:
在这里插入图片描述
sizeof操作符操作数的类型长度(以字节为单位)
有很多人会将这个当作一个函数,实际上,这只是一个操作符
如何证明这一点呢?我们都知道函数的调用后面必须得加小括号,我们可以测试以下sizeof后面不加小括号是否可以运行便可。

#include <stdio.h>
int main()
{
    int arr[10] = { 0 };
    printf("%d\n", sizeof arr);
    return 0;
}

运行:【40,是计算整个数组的大小,单位是字节】
在这里插入图片描述

注:strlen是计算字符串长度 sizepf是计算数据所占空间大小

五.关系操作符

引用:图片
在这里插入图片描述

六.条件表达式(三目运算符)

表达式1 ? 表达式2 :表达式3;

条件表达式与分支语句if极为相似,可以说功能是一致的

如果表达式1的值为真,整个表达式的值为表达式2的值

如果表达式1的值为假,整个表达式的值为表达式3的值
简单的运用以下,如代码

由于a小于b成立,则表达式的值为a的值,然后赋值给c
因为1<2 ,所以c = a = 1

#include <stdio.h>
int main()
{
    int a = 1;
    int b = 2;
    int c = 0;
    c = a < b ? a : b;
    printf("%d\n", c);
    //最后c的值为1
    return 0;
}

运行:
在这里插入图片描述

七.逗号表达式

表达式1,表达式2,表达式3.……表达式n

#include <stdio.h>


    int main()
    {
       
        int a = 1;
        int b = 2;
        int c = (a++, b += a, c = b);       //   b = b + a
        printf("%d %d %d ", a, b, c);
        return 0;
    }

b += a       =    b = b + a

运行:
在这里插入图片描述

如果您发现文章有错误请与我留言,感谢

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

马职音人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值