C语言——运算符和表达式

news2025/1/31 8:03:41

所谓表达式就是指由运算符、运算量和标点符号组成的有效序列,其目的是说明一个计算过程。表达式可以独立成语句:表达式;

运算符按功能分为:算术运算、赋值运算、关系运算、逻辑运算、位运算以及其他运算符

1. 算术运算符:+ - * / % ++ –

(1)/:整数相除,向下取整。

int a=3/2;
float b=3/2;
float c=3.0/2;
float n1=3,n2=2;
printf("%d\n",a);//1
printf("%f\n",b);//1.000000
printf("%f\n",c);//1.50000
printf("%f\n",n1/n2);//1.50000

只针对于常量相除,不针对于变量相除。

(2)%:只能用于整数运算,取余

10%3=1
12%10=2
123%10=3

练习:将12345的个十百千万位分别输出到终端。

#include <stdio.h>
int main(int argc, char const *argv[])
{
    int n=12345,g=0,s=0,b=0,q=0,w=0;
    g=n%10;
    s=n/10%10;
    b=n/100%10;
    q=n/1000%10;
    w=n/10000;
    printf("%d %d %d %d %d \n",w,q,b,s,g);
    return 0;
}

(3)++:自增

int a=0;

a++;或者++a;

相当于a=a+1;

int a=1,b=1;
a++;//a=a+1
++b;//b=b+1
printf("%d %d\n",a,b);//2 2

(4)–:自减

a--;
--a;
a=a-1;
#include 
int main(int argc, char const *argv[])
{
    int a=1,b=1;
    a--;//a=a-1
    --b;//b=b-1
    printf("%d %d\n",a,b);//0 0
    return 0;
}

自加自减和打印结合🚨:++在前先++再打印,++在后先打印在++。

#include 
int main(int argc, char const *argv[])
{
    int a=1,b=1;
    printf("%d\n",a++); //打印1 相当于:printf("%d\n",a);a++;
    printf("%d\n",a);   //打印2
    printf("%d\n",++b); //打印2 相当于:b++;printf("%d\n",b);
    return 0;
}

2. 赋值运算:= += -+ *= /= %=

int a=1,b=0;

(1)b=a++; //先赋值,再自加

先当于:b=a;a++;

(2)b=++a; //先自加,再赋值。

相当于:a++;b=a;

    int a=1,b=0;
    //b=++a;//结果会得2
    b=a++;
    printf("%d",b);//结果得1

例如:z=++x+y++;

相当于:x=x+1;z=x+y;y=y+1;

(3)a+=2;

相当于:a=a+2;

练习:

#include 
int main(int argc, char *argv[])
{
    int a = 10;
    int b = a++; //b=10 a=11
    int c = a + b;//c=21
    int d = (b++) +c;// d=10+21
    printf("d =%d \n",d);//d=31
    return 0;
}

练习:

#include 
int main(int argc, char *argv[])
{
    int a = 10;
    int b = ++a;  //b=11 a=11     
    int c = a + (b++); //a=11 b=12 c=22
    int d = b + c;    //d=12+22=34
    printf("%d\n", d);
    return 0;
}
运算符名称示例功能缩写
<小于aa小于b时返回真,否则返回假。LT
<=小于等于a<=ba小于等于b时返回真,否则返回假。LE
>大于a>ba大于b时返回真,否则返回假。GT
>=大于等于a>=ba大于等于b时返回真,否则返回假。GE
==等于a==ba等于b时返回真,否则返回假。EQ
!=不等于a!=ba不等于b时返回真,否则返回假。NE

例子:

#include 
int main()
{
    int a=2,b=3;
    printf("%d\n",a>b);
    printf("%d\n",100%10!=0);
    return 0;
}

3.逻辑运算符:&& || !

3.1 &&(逻辑与)

全真则真,一假则假。

全都是真的才是真,只要有假就是假。

3.2 ||(逻辑或)

一真则真,全假则假。

只要有真就是真,全都是假才是假。

3.3 !(逻辑非)

非真为假,非假为真。

例子:

#include 
int main()
{
    int a=2,b=3;
    printf("%d\n",a>b); //0
    printf("%d\n",100%10!=0); //0
    printf("%d\n",(a<0)||(a>3));//0
    printf("%d\n",!(a>b));//1
    return 0;
}

3.4 截断法则🚨

逻辑或||运算中:如果前面表达式为真,则后面的表达式不执行。

逻辑与&&运算中:如果前面表达式为假,则后面的表达式不执行。

练习:

#include 
int main()
{
    int a=5,b=6,c=7,d=8,m=2,n=2;
    int r=(m=a<b)||(n=c>d);
    printf("%d  %d %d",m,n,r);//1 2 1
}
#include 
int main()
{
    int a=5,b=6,c=7,d=8,m=2,n=2;
    int r=(m=a>b)&&(n=c>d);
    printf("%d  %d  %d",m,n,r);//0 2 0
}

4 .位运算符:& | ~ ^ << >>

含义C语言
按位与a&b
按位或a|b
按位异或a^b
按位取反~a
左移a<
右移a>>b
无符号右移/

负数都是用反码进行运算的

4.1 位与 &

全1则1,有0则0.

例如:

​		1111 0101

​	&	1010 1111

​		1010 0101

4.2 位或 |

有1则1,全0为0。

例如:

​	1111 0101

|	0101 0011

​	1111 0111

4.3 异或^

不同为1,相同为0。

例如:

​ 1111 0101

^ 1111 1101

​ 0000 1000

4.4 取反 ~

按位取反,0变成1,1变成0。

​		原码	  反码				      补码

正数:   本身	本身						本身

负数:   本身	除了符号位不变其他位按位取反	反码+1
~15

正数15:0000 1111

~15:11110000

~-1:

原码:		  1000 0001

反码:		  1111 1110

补码=反码+1: 1111 1111

~(-1):0000 0000

~ -5:

原码:1000 0101

反码:1111 1010

补码:1111 1011

~(-5):0000 0100

4.5 << 左移

左移几位,右边补几个零。

8<<2: 0000 1000<<2==>0010 0000

-5<<3:

原码:1000 0101

反码:1111 1010

补码:1111 1011

<<3:  1101 1000

​	  1101 0111

​	1010 1000 = -40

负数补码求原码:先减一,再符号位不变然后按位取反。

4.6 >> 右移

右移几位,左边补几个符号位(即正数补0负数补1)。

8>>2 :

0000 1000>>2 :0000 0010=2

4.7 置一公式和置零公式

置一公式:a|(1<<n)

置零公式:a&(~(1<<n))

例子:

#include 
int main()
{
    int a=0b0111;
    printf("%d\n",a|(1<<3));//15
    printf("%d\n",a&(~(1<<2)));//3
    return 0;
}

5. 特殊运算符

5.1 三目运算符

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

先求解表达式1,若其值为真则执行表达式2,表达式2的返回值作为整体的取值。否则将表达式3的值作为整体的取值。

#include 
int main()
{
    int a=10,b=6,max=0;
    max=(a>b)?a:b;
    printf("%d\n",max);  
    return 0;
}

练习:判断以下打印结果

int num1 = 10, num2 = 20;
int res = num1 > num2 ? num1++ : num2++;
printf("num1=%d  num2=%d   res=%d\n", num1, num2, res);//10 21 20

5.2 sizeof( )**

用来计算数据所占空间大小的运算符。

格式:sizeof(数据类型或者变量名);

#include 
int main()
{
    int a = 10;
    double d=1.5;
    char c='a';
    printf("%d\n", sizeof(int));//4
    printf("%d\n", sizeof(a));//4
    printf("%d\n", sizeof(d));//8
    printf("%d\n", sizeof(c));//1
    return 0;
}

6 .优先级

p96giVJ.png

口诀📢: 单算移关与,异或逻条赋,从右向左单条赋

小练习1:实现大小写字母转换

#include 
int main(int argc, char const *argv[])
{
    char ch = getchar();
    if (ch >= 'A' && ch <= 'Z')
        ch += 32;
    else if (ch >= 'a' && ch <= 'z')
        ch -= 32;
    else 
        printf("input error:\n");
    putchar(ch);
    putchar(10);
    return 0;
}

小练习2:结合宏定义和三目运算符实现求两个数的差

#include 
/*方式1.三目运算符结合宏 */
#define M 30
#define N 50
#define DIFF M>N?M-N:N-M
/*方式2.三目运算符结合宏函数 */         
#define DIFF_FUN(A,B) A>B?A-B:B-A

int main(int argc, char const *argv[])
{
    printf("%d\n",DIFF);        
    printf("%d\n",DIFF_FUN(7,1));//调用宏函数
}

小练习3:给出一个年份,判断是平年还是闰年。如果是润年打印1,平年打印0。

(思路:判断闰年还是平年,闰年且闰年二月份以上比平年多一天。普通年份除以4,有余数是平年,对于整百的年份,比如2100年,要除以400,有余数就是平年,整除就是闰年。)

思路,可以设置一个标志flag来接收平年还是闰年。然后用逻辑运算去判断平年还是闰年。最后打印flag。

#include
int main(int argc, char const *argv[])
{
    int year=0,leap=1;
    scanf("%d",&year);
    leap=(year%4==0 && year%100!=0 || year%400==0);
    printf("闰年为1,平年为0:%d\n",leap);
    return 0;
}

t *argv[])
{
printf(“%d\n”,DIFF);
printf(“%d\n”,DIFF_FUN(7,1));//调用宏函数
}




小练习3:给出一个年份,判断是平年还是闰年。如果是润年打印1,平年打印0。

*(思路:判断闰年还是平年,闰年且闰年二月份以上比平年多一天。普通年份除以4,有余数是平年,对于整百的年份,比如2100年,要除以400,有余数就是平年,整除就是闰年。)*

思路,可以设置一个标志flag来接收平年还是闰年。然后用逻辑运算去判断平年还是闰年。最后打印flag。

```c
#include
int main(int argc, char const *argv[])
{
    int year=0,leap=1;
    scanf("%d",&year);
    leap=(year%4==0 && year%100!=0 || year%400==0);
    printf("闰年为1,平年为0:%d\n",leap);
    return 0;
}

img

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

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

相关文章

项目部署 | Linux安装Git和Maven

知识目录 一、写在前面✨二、安装Git&#x1f495;2.1 yum安装git2.2 新建Git仓库2.3 拉取仓库代码 三、安装Maven&#x1f495;3.1 上传Maven压缩包并解压3.2 配置环境变量3.3 设置本地仓库3.4 设置中央仓库 四、总结撒花&#x1f60a; 一、写在前面✨ 大家好&#xff01;我是…

二叉树的递归遍历与迭代遍历(图示)

文章目录 前言1. 二叉树的递归遍历&#xff08;一入递归深似海&#xff0c;从此offer是路人&#xff09;1.1 [前序遍历](https://leetcode.cn/problems/binary-tree-preorder-traversal/)1.2 [中序遍历](https://leetcode.cn/problems/binary-tree-inorder-traversal/)1.3 [后序…

实验一 Python基础编程

实验一 Python基础编程 只为给原因学习编程的同学提供一个思路&#xff0c;让编程更简单&#xff01;&#xff01;&#xff01; 本博主擅长整理粉丝的私信&#xff01;只要你有需求就可以告诉博主&#xff01;博主可以帮你解决并发表&#xff01; 一、实验学时 2学时 二、实…

docker发布到dockerhub报错denied: requested access to the resource is denied

docker发布到dockerhub报错denied: requested access to the resource is denied 解决方案 修改发布的镜像的REPOSITORY为自己的账户名镜像&#xff0c;比如我的用户名是luobotoutou123。docker tag tomcat02:1.0 luobotoutou123/tomcat02:1 然后发布镜像 到dockerhub远程仓库…

学习杂记 2023.5.13 单词背诵

目录 鼠标上的DPI是什么&#xff1f; 鼠标上的DPI是什么&#xff1f; DPI是英文Dots Per Inch的缩写&#xff0c;意思是每英寸点数。在计算机中&#xff0c;DPI通常用于描述指针设备&#xff08;例如鼠标&#xff09;的精度。在鼠标上&#xff0c;DPI指的是鼠标移动时指针在屏…

[图神经网络]ViG(Vision GNN)网络代码实现

论文解读&#xff1a; [图神经网络]视觉图神经网络ViG(Vision GNN)--论文阅读https://blog.csdn.net/weixin_37878740/article/details/130124772?spm1001.2014.3001.5501代码地址&#xff1a; ViGhttps://github.com/huawei-noah/Efficient-AI-Backbones/tree/master/vig_p…

Hive之DDL

目录 对数据库操作&#xff1a; 创建数据库&#xff1a; 查看数据库信息&#xff1a; 1.查看基本信息&#xff1a; 2.查看详尽信息&#xff1a; 删除数据库&#xff1a; 1.简单语法&#xff1a; 2.复杂语法&#xff1a; 对表操作&#xff1a; 创建表&#xff1a; 1.普…

JVM-内存结构

✅作者简介&#xff1a;热爱Java后端开发的一名学习者&#xff0c;大家可以跟我一起讨论各种问题喔。 &#x1f34e;个人主页&#xff1a;Hhzzy99 &#x1f34a;个人信条&#xff1a;坚持就是胜利&#xff01; &#x1f49e;当前专栏&#xff1a;JVM &#x1f96d;本文内容&…

《程序员的底层思维》读书笔记

人是能够习惯于任何环境的生物&#xff0c;之前你认为自己难以克服的困难&#xff0c;慢慢都会适应了。 维克多弗兰克《活出生命的意义》 文章目录 人是能够习惯于任何环境的生物&#xff0c;之前你认为自己难以克服的困难&#xff0c;慢慢都会适应了。 基础思维能力逻辑思维批…

每日学术速递5.12

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.ImageBind: Holistic AI learning across six modalities 标题&#xff1a;ImageBind&#xff1a;跨六种模式的整体人工智能学习 作者&#xff1a;Mengyuan Yan Jessica Lin Mont…

支付系统设计三:渠道网关设计04-渠道数据补全

文章目录 前言一、交易信息准备1. MessageDescription内容2. 交易信息填充3. 开户机构信息填充4. 省市区域信息填充5. 银行信息填充 二、路由处理三、支付渠道数据补全1.服务端支付渠道获取2. 支付渠道通用数据补全2.1 支付渠道账户信息补全2.1 商户信息补全结束 3. 支付渠道差…

具有噪声标签的鲁棒医学图像分割的点类仿射损失校正

文章目录 Joint Class-Affinity Loss Correction for Robust Medical Image Segmentation with Noisy Labels摘要本文方法Differentiated Affinity Reasoning (DAR)Class-Affinity Loss Correction (CALC)Class-Level Loss CorrectionAffinity-Level Loss CorrectionClass-Affi…

AcWing算法提高课-1.3.4数字组合

宣传一下算法提高课整理 <— CSDN个人主页&#xff1a;更好的阅读体验 <— 本题链接&#xff08;AcWing&#xff09; 点这里 题目描述 给定 N N N 个正整数 A 1 , A 2 , … , A N A_1,A_2,…,A_N A1​,A2​,…,AN​&#xff0c;从中选出若干个数&#xff0c;使它们…

轻松搭建冒险岛服务器-冒险岛私服搭建详细教程

想要拥有一个属于自己的冒险岛世界吗&#xff1f;想要一步步学习如何架设冒险岛服务器吗&#xff1f;本文将从如何选择服务器、安装系统、配置环境、搭建数据库、部署网站、上传文件、启动服务等8个方面&#xff0c;一步步为大家详细讲解冒险岛架设教程。让你轻松打造属于自己的…

sql 性能优化基于explain调优

文章目录 Explain分析&#xff1f;问题描述解决方案 Explain分析&#xff1f; 关于Explain具体可以干什么&#xff0c;有哪些优缺点&#xff0c;本博主的文章有写到&#xff0c;这是链接地址: 点击这里查看. 下面来说下Explain在项目实战中&#xff0c;如何去进行优化。 问题…

7年老人,30岁的测试说辞就辞,“人员优化”4个字,泰裤辣...

前几天&#xff0c;一个认识了好几年在大厂做测试的程序员朋友&#xff0c;年近30了&#xff0c;在公司做了7年了&#xff0c;一直兢兢业业&#xff0c;最后还是却被大厂以“人员优化”的名义无情被辞&#xff0c;据他说&#xff0c;有一个月散伙饭都吃了好几顿…… 在很多企业…

【ChatGPT】国内免费使用ChatGPT镜像

Yan-英杰的主页 悟已往之不谏 知来者之可追 C程序员&#xff0c;2024届电子信息研究生 目录 什么是ChatGPT镜像&#xff1f; 亲测&#xff1a; 一、二狗问答(AI对话) 二、AiDuTu 三、WOChat 四、ChatGPT(个人感觉最好用) 我们可以利用ChatGPT干什么&#xff1f; 一、三分…

薪人薪事 java开发实习一面

目录 1.常用数据结构&#xff0c;区别及使用场景2.数组和链表在内存中数据的分布情况3.HashMap底层数据结构4.put操作5.JVM内存区域6.各个区域存放什么东西7.创建一个对象&#xff0c;内存怎么分配的8.堆中内存怎么划分&#xff0c;gc怎么回收9.IOC 原理10.Bean存放在哪里11.AO…

支付系统设计三:渠道网关设计05-交易持久化

文章目录 前言一、领域模型持久化服务工厂二、聚合创建工厂1. 模型创建1.1 获取域模型Class1.2 新建模型1.3 数据填充 2. 模型持久化2.1 获取域模型对应的仓储2.2 调用域模型仓储进行持久化 总结 前言 本篇将解析交易信息入库&#xff0c;即对上送的参数&#xff0c;在进行校验…

关于ASA广告归因接入方法

投放苹果ASA广告&#xff0c;提高 app 曝光率、下载量的增长&#xff0c;那么我们该如何从后台看到投放广告的效果呢&#xff1f; 我们可以借助Apple Ads归因API。那什么是归因&#xff1f;什么又是API呢&#xff1f; 归因&#xff1a;可以给用户打标签&#xff0c;然后看他在…