【C语言】/*操作符(上)*/

目录

一、算数操作符:+、-、*、/、%

1.1 + 和 -

1.2 * 

1.3 / 

1.4 % 

二、赋值操作符:= 和符合赋值

2.1 连续赋值

2.2 复合赋值(自操作)

三、单目操作符:++、--、+(正号)、-(负号)

3.1 ++ 和 --  

3.1.1 前置++

3.1.2 后置++

3.1.3 前置--

3.1.4 后置--

3.2 正号(+) 和负号(-)

四、强制类型转换

五、关系操作符

六、条件操作符

七、逻辑操作符:&&、||、!

7.1 逻辑取反运算符

7.2 与运算符

7.3 或运算符

7.4 短路


一、算数操作符:+、-、*、/、%

1. 算术操作符分别是: +、-、*、/、%,这些操作符都是双⽬操作符(有两个操作数)

2. 注:操作符也被叫做运算符,是不同的翻译,意思是⼀样的。

 1.1 + 和 -

1. + 和 - 用来完成加法和减法。

2. 示例代码如下图:

1.2 * 

1. 运算符 * ⽤来完成乘法。

2. 示例代码如下图:

1.3 / 

1. 运算符/⽤来完成除法,除号的两端如果是整数,执⾏的是整数除法,得到的结果是商

2. 示例代码如下图:

3. 上⾯⽰例中,尽管变量 x 的类型是 float (浮点数),但是 6 / 4 得到的结果是 1.0 ,⽽不是 1.5 ,原因就在于 C 语⾔⾥⾯的整数除法计算的结果是商,余数部分被被丢弃。

4. 如果希望得到浮点数的结果,两个运算数必须⾄少有⼀个浮点数,这时 C 语⾔就会进⾏浮点数除法

5. 示例代码如下图:

5. 示例代码如下图:

6. 上⾯的代码,你可能觉得经过运算, score 会等于 25 ,但是实际上 score 等于 0 。这是因为 score / 20 采用的是整数除法,(score / 20)会得到⼀个整数值 0 ,所以乘以 100 后得到的也是 0 。 为了得到预想的结果,可以将除数 20 改成 20.0 ,让整数除法变成浮点数除法。

1.4 % 

1. 运算符 % 表⽰取模运算,即返回两个整数相除的余值;这个运算符只能⽤于整数,不能⽤于浮点数。

2. 示例代码如下图:

3. 负数求模的规则是,结果的正负号由第⼀个运算数的正负号决定

4. 示例代码如下图:

5. 上⾯⽰例中,第⼀个运算数的正负号( 11 或 -11 )决定了结果的正负号。

二、赋值操作符:= 和符合赋值

1. 在变量创建的时候给⼀个初始值叫初始化,在变量创建好后,再给⼀个值,这叫赋值

    int a = 100;//初始化

    a = 200;//赋值,这⾥使⽤的就是赋值操作符

2. 赋值操作符 = 是⼀个随时可以给变量赋值的操作符

2.1 连续赋值

1. 赋值操作符也可以连续赋值,如:

    int a = 3;

    int b = 5;

    int c = 0;

    c = b = a+3;//连续赋值,从右向左依次赋值的。

2. C语⾔虽然⽀持这种连续赋值,但是写出的代码不容易理解,建议还是拆开来写,这样⽅便观察代码的执⾏细节。 

2.2 复合赋值(自操作)

1. 在写代码时,我们经常可能对⼀个数进⾏⾃增、⾃减的操作,如下代码:

    int a = 10;

    a = a+3;

    a = a-2;

2. 这样代码C语⾔给提供了更加⽅便的写法:

    int a = 10;

    a += 3;

    a -= 2;

3. C语⾔中提供了复合赋值符,⽅便我们编写代码,这些赋值符有:

    +=、-=、*=、 /=、 %=

    >>=、<<=、 &=、 |=、^=

三、单目操作符:++、--、+(正号)、-(负号)

1. C语⾔中还有⼀些操作符只有⼀个操作数,被称为单⽬操作符。 ++、--、+(正)、-(负) 就是单⽬操作符的

3.1 ++ 和 --  

1. ++是⼀种⾃增的操作符,⼜分为前置++和后置++,--是⼀种⾃减的操作符,也分为前置--和后置--。

2. 单独写前置和后置表达的效果是一样的,例如:++a 和 a++ 表达的都是a自加1。

3.1.1 前置++

1. int a = 10;

    int b = ++a;//++的操作数是a,是放在a的前⾯的,就是前置++

    printf("a=%d b=%d\n",a , b);

2. 计算⼝诀:先+1,后使⽤;

3. a原来是10,先+1,后a变成了11,再使⽤就是赋值给b,b得到的也是11,所以打印的结果,a和b都是11,上面的代码相当于这样的代码:

    int a = 10;

    a = a+1;

    b = a;

    printf("a=%d b=%d\n",a , b);

3.1.2 后置++

1. int a = 10;

    int b = a++;//++的操作数是a,是放在a的后⾯的,就是后置++

    printf("a=%d b=%d\n",a , b);

2. 计算⼝诀:先使⽤,后+1;

3. a原来是10,先使⽤,就是先赋值给b,b得到了10,然后再+1,然后a变成了11,所以打印的结果 a是11,b是10,上面的代码相当于这样的代码:

    int a = 10;

    int b = a;

    a = a+1;

    printf("a=%d b=%d\n",a , b);

3.1.3 前置--

1. 计算⼝诀:先-1,后使⽤;

2. int a = 10;

    int b = --a;//--的操作数是a,是放在a的前⾯的,就是前置--

    printf("a=%d b=%d\n",a , b);//输出的结果是:9 9

3.1.4 后置--

1. 计算⼝诀:先使⽤,后-1;

2. int a = 10;

    int b = a--;//--的操作数是a,是放在a的后⾯的,就是后置--

    printf("a=%d b=%d\n",a , b);//输出的结果是:9 10

3.2 正号(+) 和负号(-)

1. 这⾥的+是正号,-是负号,都是单⽬操作符。

2. 运算符 + 对正负值没有影响,是⼀个完全可以省略的运算符,但是写了也不会报错。

    int a = +10; 等价于 int a = 10;

3. 运算符 - ⽤来改变⼀个值的正负号,负数的前⾯加上 - 就会得到正数,正数的前⾯加上 - 会得到负数。但是int a = --10;//err,--会被认为是前置--,且--操作符的操作数必须是可修改的值,而不能是常量,写成int a = -+10是可以的。

    int a = 10;

    int b = -a;

    int c = -10;

    printf("b=%d c=%d\n", b, c);//这⾥的b和c都是-10

    int a = -10;

    int b = -a;

    printf("b=%d\n", b); //这⾥的b是10

四、强制类型转换

1. 语法形式:(类型)

2. int a = 3.14; //a的是int类型, 3.14是double类型,两边的类型不⼀致,编译器会报警告

3. 为了消除这个警告,我们可以使⽤强制类型转换:int a = (int)3.14;//意思是将3.14强制类型转换为int类型,这种强制类型转换只取整数部分

4. 俗话说,强扭的⽠不甜,我们使⽤强制类型转换都是万不得已的时候使⽤,如果不需要强制类型转化 就能实现代码,这样⾃然更好的。

五、关系操作符

1. C 语⾔⽤于⽐较的表达式,称为“关系表达式”,⾥⾯使⽤的运算符就称为“关系运算符”,主要有下⾯6个:

     >      ⼤于运算符

     <      ⼩于运算符

    >=     ⼤于等于运算符

    <=     ⼩于等于运算符

    ==     相等运算符

    !=      不相等运算符

2. 关系表达式的结果为真返回1,为假返回0

3. C 语⾔中,0 表⽰假,所有⾮零值表⽰真,例如,20 > 12 返回 1 ,12 > 20 返回 0 。

4. 关系表达式常⽤于 if 或 while 结构。

    if (x == 3)

    {

           printf("x is 3.\n");

    }

5. 注意:相等运算符 == 与赋值运算符 = 是两个不⼀样的运算符,不要混淆。有时候,可能会不⼩⼼写 出下⾯的代码,它可以运⾏,但很容易出现意料之外的结果。

    if (x = 3) ...

6. 上⾯⽰例中,原本的意思是 x == 3 ,但是不⼩⼼写成 x = 3,此时这个式⼦表⽰对变量 x 赋值3 ,它的返回值为 3 ,所以 if 判断总是为真。 为了防⽌出现这种错误,有的程序员喜欢将变量写在相等运算符的右边,例如 if (3 == x) ... 这样的话,如果把 == 误写成 = ,编译器就会报错,因为赋值表达式的左边必须是可以修改的左值

    /* 报错 */

    if (3 = x) ...

7. 另⼀个需要避免的错误是:多个关系运算符不宜连⽤

    i < j < k //err

8. 上⾯⽰例中,连续使⽤两个⼩于运算符。这是合法表达式,不会报错,但是通常达不到想要的结果, 即不是保证变量 j 的值在 i 和 k 之间。因为关系运算符是从左到右计算,所以实际执⾏的是下⾯的表达式

    (i < j) < k

9. 上⾯式⼦中, i < j 返回 0 或 1 ,所以最终是 0 或 1 与变量 k 进⾏⽐较。如果想要判断变量 j 的值是否在 i 和 k 之间,应该使⽤下⾯的写法

    i < j && j < k

10. ⽐如:我们输⼊⼀个年龄,如果年龄在18岁~36岁之间,我们输出⻘年,如果我们这样写,当我们输⼊10 的时候,依然输出⻘年。

    #include <stdio.h>

    int main()

   {

             int age = 0;

             scanf("%d", &age);

             if(18<=age<=36)

             {

                       printf("⻘年\n");

             }

             return 0;

   }

11. 这是因为,我们先拿 18 和 age 中存放的10⽐较,表达式18<=10为假, 18<=age 的结果是0,再拿 0 和 36⽐较,0<=36为真,所以打印了⻘年,所以即使当age是10的时候,也能打印⻘年 ,逻辑上是有问题的,修改代码如下。

12.  #include <stdio.h>

       int main()

      {

              int age = 0;

              scanf("%d", &age);

              if(age>=18 && age<=36)

              {

                       printf("⻘年\n");

              }

             return 0;

      }

六、条件操作符

1. 条件操作符也叫三⽬操作符(C语言中唯一的三目操作符),需要接受三个操作数的,形式如下:exp1 ? exp2 : exp3

2. 条件操作符的计算逻辑是:如果 exp1 为真, exp2 计算计算的结果是整个表达式的结果;如果 exp1 为假, exp3 计算计算的结果是整个表达式的结果

#include <stdio.h>
int main()
{int a = 0;int b = 0;scanf("%d %d", &a, &b);if (a > 5)b = 3;elseb = -3;//上面四行代码可以直接写成:b = a > 5 ? 3 : -3;printf("%d\n", b);return 0;
}
//使⽤条件表达式实现找两个数中较⼤值
#include <stdio.h>
int main()
{int a = 0;int b = 0;scanf("%d %d", &a, &b);int m = a > b ? a : b;printf("%d\n", m);return 0;
}

七、逻辑操作符:&&、||、!

1. 逻辑运算符提供逻辑判断功能,⽤于构建更复杂的表达式,主要有下⾯三个运算符。

    ! :逻辑取反运算符(改变单个表达式的真假),单目操作符

   && :与运算符,就是并且的意思(一假则假)

    || :或运算符,就是或者的意思(一真则正)

 7.1 逻辑取反运算符

1. ⽐如,我们有⼀个变量叫 flag,如果flag为假,要做⼀个什么事情,就可以这样写代码:

     #include <stdio.h>

     int main()

     {

            int flag = 0;

            if(!flag)

            {

                    printf("do something\n");

            }

            return 0;

     }

2. 如果 flag 为真, !flag 就是假,如果 flag 为假, !flag 就是真 所以上⾯的代码的意思就是 flag 为假,执⾏if语句中的代码。

7.2 与运算符

1. && 就是与运算符,也是并且的意思, && 是⼀个双⽬操作符,使⽤的⽅式是 a&&b , && 两边的表达式都是真的时候,整个表达式才为真,只要有⼀个是假,则整个表达式为假

2. ⽐如:如果我们想表示⽉份是3⽉到5⽉,是春天。

    int month = 0; 

    scanf("%d", &month);

    if (month >= 3 && month <= 5)

    {

           printf("春季\n");

    }

3. month >= 3 && month <= 5 这⾥表达的意思就是 month 既要⼤于等于3,⼜要⼩于等于5,必须同时满⾜。 

7.3 或运算符

1. || 就是或运算符,也就是或者的意思, || 也是⼀个双⽬操作符,使⽤的⽅式是 a || b ,|| 两边的表达式只要有⼀个是真,整个表达式就是真,两边的表达式都为假的时候,才为假

2. ⽐如:如果我们想表示⼀年中⽉份是12⽉或者1⽉或者2⽉是冬天。

    int month = 0;

    scanf("%d", &month);

    if(month == 12 || month==1 || month == 2)

    {

           printf("冬季\n");

    }

//输⼊⼀个年份year,判断year是否是闰年
//闰年判断的规则:
//1. 能被4整除并且不能被100整除是闰年
//2. 能被400整除是闰年
int main()
{int year = 0;scanf("%d", &year);if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))printf("是闰年\n");return 0;
}

 7.4 短路

1. C语⾔逻辑运算符还有⼀个特点,它总是先对左侧的表达式求值,再对右边的表达式求值,这个顺序是保证的。 如果左边的表达式满⾜逻辑运算符的条件,就不再对右边的表达式求值,这种情况称为“短路”。

2. if(month >= 3 && month <= 5)

3. 上面的表达式中&& 的左操作数是 month >= 3 ,右操作数是 month = 3 的结果是0的时候,即使不判断 month <= 5 ,整个表达式的结果也是0(不是春季),所以,对于&&操作符来说,左边操作数的结果是0的时候,右边操作数就不再执⾏

4. if(month == 12 || month==1 || month == 2)

5. 上面的表达式中如果month == 12,则不⽤再判断month是否等于1或者2,整个表达式的结果也是1(是冬季),所以, || 操作符的左操作数的结果不为0时,就⽆需执⾏右操作数

6. 练习:阅读代码,计算代码输出的结果

    #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\nb = %d\nc = %d\nd = %d\n", a, b, c, d);//1 2 3 4
         return 0;
}

   本篇文章已完结,谢谢支持哟 ^^ !!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/10458.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

稳定网络的诀窍:静态住宅代理解决方案

在数字化时代&#xff0c;网络稳定性对于个人和企业都至关重要。然而&#xff0c;由于多种因素的影响&#xff0c;如地理位置、网络拥堵或网络安全问题等&#xff0c;网络稳定性常常受到挑战。为了应对这些挑战&#xff0c;静态住宅代理作为一种高效且可靠的网络解决方案&#…

C++容器——list

目录 list容器 list容器使用流程 加入头文件 定义 list容器的使用 添加元素&#xff1a; 删除元素&#xff1a; 访问元素&#xff1a; 容器大小&#xff1a; 迭代器操作&#xff1a; 其他操作&#xff1a; list容器 功能&#xff1a;将数据进行链式存储 链表(list…

kali linux2024.1版安装

1 基于 VMware 安装 Kali 系统 打开已经安装好的 VMware 程序&#xff0c;点击选项卡中的“主页”--》而后点击“创建新的虚拟机” 选择“典型(推荐)”&#xff0c;并点击“下一步” 客户机操作系统镜像选择&#xff1a;选择“稍后安装操作系统”&#xff0c;并点击“下一步”…

《中阿科技论坛(中英文)》是什么级别的期刊?是正规期刊吗?

问题解答 问&#xff1a;《中阿科技论坛&#xff08;中英文&#xff09;》是核心期刊吗&#xff1f; 答&#xff1a;不是&#xff0c;但是正规期刊 问&#xff1a;《中阿科技论坛&#xff08;中英文&#xff09;》是什么级别期刊&#xff1f; 答&#xff1a;省级 主管单位…

转转小程序数据处理

声明 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01;wx a15018601872&#xff0c;x30184483x…

BUU-[GXYCTF2019]Ping Ping Ping

考察点 命令执行 题目 解题 简单测试 ?ip应该是一个提示&#xff0c;那么就测试一下?ip127.0.0.1 http://0c02a46a-5ac2-45f5-99da-3d1b0b951307.node4.buuoj.cn:81/?ip127.0.0.1发现正常回显 列出文件 那么猜测一下可能会有命令执行漏洞&#xff0c;测试?ip127.0.…

dos命令改3389端口,通过dos命令更改3389端口的操作

要使用DOS命令更改3389端口&#xff0c;通常涉及修改Windows注册表中的相关键值。请注意&#xff0c;直接操作注册表具有一定的风险&#xff0c;因此在进行任何更改之前&#xff0c;请确保您了解正在进行的操作&#xff0c;并已经采取了适当的备份措施。 以下是一个基本的操作步…

记录一次接口优化的过程。接口响应时间从500s下降到5s。

记录一次接口优化的过程。接口响应时间从500s下降到5s。 接口说明&#xff1a; 该接口通过用户导入的一年内每天的厂区用电功率数据来计算用户安装储能设备后的收益情况。 用电功率数据具体为每15分钟一条&#xff0c;一年约有 12*30*24*4 34560 条。 代码循环情况为&…

详解GaussDB(DWS)中的行执行引擎

1.前言 GaussDB&#xff08;DWS&#xff09;包含三大引擎&#xff0c;一是SQL执行引擎&#xff0c;用来解析用户输入的SQL语句&#xff0c;生成执行计划&#xff0c;供执行引擎来执行&#xff1b;二是执行引擎&#xff0c;其中包含了行执行引擎和列执行引擎&#xff0c;执行引擎…

当时这样说就好了的笔记

系列文章目录 当时这样说就好了的笔记 文章目录 系列文章目录一、 不用好口才&#xff0c;怎么谈都讨喜的“说话金律”1、 掌握对方爱聊什么是交谈热络的第一步2、 装笨让对方当主角&#xff0c;和谁都能聊不停3、 “讲道理”谁都怕&#xff0c;坚持己见最伤感情4、 懂“聆听附…

Coursera吴恩达深度学习专项课程01: Neural Networks and Deep Learning 学习笔记 Week 04 (完结)

Neural Networks and Deep Learning Course Certificate 本文是学习 https://www.coursera.org/learn/neural-networks-deep-learning 这门课的笔记 Course Intro 文章目录 Neural Networks and Deep LearningWeek 04: Deep Neural NetworksLearning Objectives Deep L-layer…

mac第三方软件怎么删除 MacBook卸载第三方应用程序 mac第三方恶意软件删除不了怎么办呢

Mac是一款优秀的个人电脑&#xff0c;它拥有流畅的操作系统、强大的性能和丰富的应用程序。但是&#xff0c;随着使用时间的增加&#xff0c;你可能会发现你的Mac上安装了一些不需要或者不喜欢的第三方软件&#xff0c;这些软件可能会占用你的空间、影响你的速度或者带来安全风…

MahApps.Metro的MVVM模式介绍(一)

MahApps.Metro是一个开源的WPF (Windows Presentation Foundation) UI 控件库。它的特点有现代化设计、主题定制、响应式布局、内置控件。 而Mvvm模式的核心思想是将用户界面&#xff08;View&#xff09;与应用程序逻辑&#xff08;ViewModel&#xff09;分离&#xff0c;以实…

电商大数据的采集||电商大数据关键技术【基于Python】

.电商大数据采集API 什么是大数据&#xff1f; 1.大数据的概念 大数据即字面意思&#xff0c;大量数据。那么这个数据量大到多少才算大数据喃&#xff1f;通常&#xff0c;当数据量达到TB乃至PB级别时&#xff0c;传统的关系型数据库在处理能力、存储效率或查询性能上可能会遇…

设计模式-创建型-原型模式-prototype

工作经验类 public class WorkExperience implements Cloneable {private String workDate;private String company;public void setWorkDate(String workDate) {this.workDate workDate;}public void setCompany(String company) {this.company company;}Overridepublic Ob…

GAME101-Lecture06学习

前言 上节课主要讲的是三角形的光栅化。重要的思想是要利用像素的中心对三角形可见性的函数进行采样。 这节课主要就是反走样。 课程链接&#xff1a;Lecture 06 Rasterization 2 (Antialiasing and Z-Buffering)_哔哩哔哩_bilibili 反走样引入 ​ 通过采样&#xff0c;得到…

算法设计与分析 例题解答 解空间与搜索

1.请画出用回溯法解n3的0-1背包问题的解空间树和当三个物品的重量为{20, 15, 10}&#xff0c;价值为{20, 30, 25}&#xff0c;背包容量为25时搜索空间树。 答&#xff1a; 解空间树&#xff1a; 搜索空间树&#xff1a; 2. 考虑用分支限界解0-1背包问题 给定n种物品和一背包…

服务丢在tomcat中启动war包,需要在tomcat中配置Java环境吗?

一般来说&#xff0c;部署在 Tomcat 上的 WAR 包启动时不需要在 Tomcat 中单独配置 Java 环境&#xff0c;因为 Tomcat 启动本身就需要依赖 Java 环境。以下是确保 Tomcat 正常运行与部署 WAR 包的基本步骤&#xff1a; 安装 Java 环境&#xff1a; 首先&#xff0c;确保你的系…

【八】centos7.6安装chrome和chromedriver并启动selenium

学习来源&#xff1a; 安装chrome和chrome driver -----https://blog.csdn.net/zdlcome/article/details/133813441 安装Python11 -----https://blog.csdn.net/weixin_43741408/article/details/130251102 chromedriver下载地址 -----https://googlechromelabs.github.io/chrom…

个人网站快速搭建手册:低成本,高效率,轻松发布

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;React篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来-快速构建个人站|博客|系统,低成本发布上线 目录 前言 博主主页搭建案例 虚拟主机|服务器|域名 使用免费二级…