C语言常见运算符

news2024/9/21 2:39:45

C语言提供了丰富的运算符,这些运算符用于执行各种类型的操作,比如算术运算、比较运算、逻辑运算、位运算等。下面是一些基本的C语言运算符分类及其示例:

1. 算术运算符

  • 加法 (+)a + b 表示a和b的和。
  • 减法 (-)a - b 表示a和b的差。
  • 乘法 (*)a * b 表示a和b的积。
  • 除法 (/)a / b 表示a除以b的商(注意:结果会向0取整)。
  • 取模 (%)a % b 表示a除以b的余数。
  • 自增 (++)++a 或 a++,将a的值增加1。
  • 自减 (--)--a 或 a--,将a的值减少1。
#include <stdio.h>  
  
int main() {  
    int a = 5, b = 3;  
    int sum = a + b;    // 加法  
    int difference = a - b; // 减法  
    int product = a * b; // 乘法  
    int quotient = a / b; // 除法  
    int remainder = a % b; // 取模  
  
    printf("和: %d\n", sum);  
    printf("差: %d\n", difference);  
    printf("积: %d\n", product);  
    printf("商: %d\n", quotient);  
    printf("余数: %d\n", remainder);  
  
    return 0;  
}

2. 关系运算符

  • 大于 (>)a > b 如果a大于b,结果为真(true)。
  • 小于 (<)a < b 如果a小于b,结果为真(true)。
  • 等于 (==)a == b 如果a等于b,结果为真(true)。
  • 不等于 (!=)a != b 如果a不等于b,结果为真(true)。
  • 大于等于 (>=)a >= b 如果a大于或等于b,结果为真(true)。
  • 小于等于 (<=)a <= b 如果a小于或等于b,结果为真(true)。
#include <stdio.h>  
  
int main() {  
    int a = 10, b = 20;  
  
    if (a > b) {  
        printf("a大于b\n");  
    } else if (a < b) {  
        printf("a小于b\n");  
    } else {  
        printf("a等于b\n");  
    }  
  
    // 其他关系运算符示例  
    printf("a不等于b: %d\n", a != b); // 输出 1(真)  
    printf("a大于等于b: %d\n", a >= b); // 输出 0(假)  
  
    return 0;  
}

3. 逻辑运算符

  • 逻辑与 (&&)a && b 如果a和b都为真(true),则结果为真(true)。
  • 逻辑或 (||)a || b 如果a或b中有一个为真(true),则结果为真(true)。
  • 逻辑非 (!)!a 如果a为假(false),则结果为真(true);反之亦然。
#include <stdio.h>  
  
int main() {  
    int a = 1, b = 0;  
  
    if (a && b) {  
        printf("a和b都是真\n");  
    } else {  
        printf("a和b中至少有一个是假\n");  
    }  
  
    if (a || b) {  
        printf("a和b中至少有一个是真\n");  
    } else {  
        printf("a和b都是假的\n");  
    }  
  
    printf("a的否定: %d\n", !a); // 注意这里实际上会输出0(因为!a是假),但中文描述需要调整  
    // 更准确的中文描述可能是:“如果a为真,则输出假;如果a为假,则输出真。”  
    // 但由于printf直接输出的是整数值,所以这里还是保持了原始的数字输出。  
  
    return 0;  
}

4. 位运算符

  • 按位与 (&)a & b 对a和b的每一位执行与操作。
  • 按位或 (|)a | b 对a和b的每一位执行或操作。
  • 按位异或 (^)a ^ b 对a和b的每一位执行异或操作。
  • 按位取反 (~)~a 对a的每一位执行取反操作。
  • 左移 (<<)a << b 将a的二进制表示向左移动b位。
  • 右移 (>>)a >> b 将a的二进制表示向右移动b位。
#include <stdio.h>  
  
int main() {  
    unsigned int a = 5; // 二进制为 0101  
    unsigned int b = 3; // 二进制为 0011  
  
    printf("a & b: %u\n", a & b); // 0101 & 0011 = 0001  
    printf("a | b: %u\n", a | b); // 0101 | 0011 = 0111  
    printf("a ^ b: %u\n", a ^ b); // 0101 ^ 0011 = 0110  
    printf("~a: %u\n", ~a); // ~0101 = 1010...(注意这里会有补码扩展)  
    printf("a << 1: %u\n", a << 1); // 0101 << 1 = 1010  
    printf("a >> 1: %u\n", a >> 1); // 0101 >> 1 = 0010  
  
    return 0;  
}

5. 赋值运算符

  • 赋值 (=)a = b 将b的值赋给a。
  • 复合赋值运算符(如 +=-=*=/=%=): 它们在赋值的同时执行指定的算术运算。
#include <stdio.h>  
  
int main() {  
    int a = 5;  
    int b;  
  
    // 简单的赋值  
    b = a;  
    printf("b = a: b = %d\n", b);  
  
    // 加法赋值  
    a += 3; // 等同于 a = a + 3;  
    printf("a += 3: a = %d\n", a);  
  
    // 乘法赋值  
    a *= 2; // 等同于 a = a * 2;  
    printf("a *= 2: a = %d\n", a);  
  
    // 位运算赋值(以左移为例)  
    a <<= 1; // 等同于 a = a << 1;  
    printf("a <<= 1: a = %d\n", a);  
  
    return 0;  
}

6. 条件运算符

  • 条件 (?:)a ? b : c 如果a为真(true),则结果为b;否则为c。
#include <stdio.h>  
  
int main() {  
    int a = 10, b = 20;  
    int max = (a > b) ? a : b; // 如果a大于b,则max=a,否则max=b  
    printf("较大的数是: %d\n", max);  
  
    return 0;  
}

7. 逗号运算符

  • 逗号 (,)a, b 依次计算a和b的值,并返回b的值。
#include <stdio.h>  
  
int main() {  
    int a = (5, 10); // 逗号运算符,a的值为10  
    printf("a的值是: %d\n", a);  
  
    // 逗号运算符在for循环中的应用  
    for (int i = 0, j = 0; i < 5; i++, j += 2) {  
        // 循环体  
    }  
  
    // 注意:上面的for循环只是展示了逗号运算符的用法,并没有实际的打印或输出  
  
    return 0;  
}

8. 指针运算符

  • 取地址 (&)&a 获取变量a的地址。
  • 间接引用 (*) 或 解引用*p 获取指针p所指向地址的值。
#include <stdio.h>  
  
int main() {  
    int var = 20;  
    int *ptr;  
  
    // 取地址运算符  
    ptr = &var;  
    printf("var的地址是: %p\n", (void*)ptr); // 注意使用%p来打印指针,并强制转换为void*以避免警告  
  
    // 解引用运算符  
    printf("var的值是: %d\n", *ptr);  
  
    return 0;  
}

9. 长度运算符

  • sizeofsizeof(a) 返回a所占用的字节数。
#include <stdio.h>  
  
int main() {  
    int a = 10;  
    printf("int类型的大小是: %zu字节\n", sizeof(int)); // 注意使用%zu来匹配size_t类型  
    printf("变量a的大小是: %zu字节\n", sizeof(a));  
  
    return 0;  
}

10.类型转换运算符

类型转换运算符用于将一种数据类型的值转换为另一种数据类型。

#include <stdio.h>  
  
int main() {  
    float f = 3.14;  
    int i = (int)f; // 将float类型的f转换为int类型  
    printf("f转换为int后的值是: %d\n", i);  
  
    // 或者使用C99引入的复合字面量进行类型转换(虽然这不是运算符,但相关)  
    double d = (double){i}; // 实际上这里的转换是多余的,因为i已经是整数,但展示了类型转换的另一种形式  
    printf("i转换为double后的值是: %f\n", d);  
  
    return 0;  
}

(重点)运算符优先级

另外,也可以括号()来改变优先级

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

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

相关文章

2024年Ai智能绘画Stable Diffusion软件+整合包+保姆式教程

前言 在2024年的科技浪潮中&#xff0c;一款名为Stable Diffusion的AI智能绘画软件吸引了全球的目光。它不仅为艺术家和设计师提供了无限创意的可能&#xff0c;也让我们每个人都能轻松体验绘画的乐趣。那么&#xff0c;Stable Diffusion究竟有何魅力&#xff1f;它又是如何工…

消息队列实现多人聊天

消息队列实现多人聊天 分析&#xff1a; 每个程序都有两个任务&#xff0c;一个任务是负责接收消息&#xff0c;一个任务是负责发送消息&#xff0c;通过 fork 创建子进程实现多任务。 一个进程负责接收信息&#xff0c;它只接收某种类型的消息&#xff0c;只要别的进程发送…

2024i春秋第四届长城杯网络安全大赛暨京津冀网络安全技能竞赛初赛wp-flowershop+easyre

flowershop 如图所示&#xff0c;v8是钱的数量&#xff0c;strncpy从src复制三个字符给dest的数组里&#xff0c;最后一个元素是0&#xff0c;相当于字符串截断&#xff0c;strcmp是比较c和dest中的内容&#xff0c;如果相等就不会exit(0)&#xff1b;双击c进去看&#xff0c;c…

Pr:新建序列 - 设置

在“新建序列”对话框中&#xff0c;“设置” Settings选项卡的主要用途是选择预设或手动配置序列的参数&#xff0c;以确保与用户的素材和输出需求相匹配。 可以根据项目的具体要求自定义序列中的视频和音频格式&#xff0c;包括帧速率、分辨率、工作色彩空间、音频采样率等以…

nvm install 16.14.1报错“Node.js v16.14.1 is not yet released or available.”

原因&#xff1a; 使用命令nvm ls available&#xff0c;结果列出的可供下载的版本列表为空&#xff0c;这就是原因了 解决办法&#xff1a;修改镜像 nvm node_mirror https://npmmirror.com/mirrors/node/ nvm npm_mirror https://npmmirror.com/mirrors/npm/ 结果&#xf…

基于SpringBoot+Vue+MySQL的校园生活服务平台

系统展示 用户前台界面 管理员后台界面 系统背景 二十一世纪互联网的出现&#xff0c;改变了几千年以来人们的生活&#xff0c;不仅仅是生活物资的丰富&#xff0c;还有精神层次的丰富。在互联网诞生之前&#xff0c;地域位置往往是人们思想上不可跨域的鸿沟&#xff0c;信息的…

springboot优雅停机无法关闭进程,kill无法停止springboot必须kill -9,springboot线程池使用

背景最近项目在jenkins部署的时候发现部署很慢&#xff0c;查看部署日志发现kill命令执行后应用pid还存在&#xff0c;导致必须在60秒等待期后kill -9杀死springboot进程 应用环境 springboot <dependency><groupId>org.springframework.boot</groupId>&l…

u盘怎么制作win10启动盘_win10启动盘制作详细教程

u盘怎么制作win10启动盘&#xff1f;制作win10启动盘方法有很多&#xff0c;有官方制作方法&#xff0c;有第三方u盘启动盘制作方法&#xff0c;下面小编就教大家制作win10启动盘详细教程。 u盘怎么制作win10启动盘&#xff1f; 制作win10启动通常有两种方法&#xff1a;直接安…

带有HSE组件的S32系列芯片中各子系统如何依次启动?

《S32系列芯片——Boot详解》系列——带有HSE组件的S32系列芯片中各子系统如何依次启动&#xff1f; 一、各子系统的重置释放顺序二、启动流程2.1 安装启动过程2.2 正常启动流程 博主已开通同名公众号&#xff0c;通过文末或主页二维码关注博主&#xff0c;将为你推送最新、最细…

音乐网站-前后台登录注册搜索试听下载评论音乐分计算机毕业设计/springboot/javaWEB/J2EE/MYSQL数据库/vue前后分离小程序

1. 前台功能模块 首页&#xff1a; 展示热门音乐、推荐音乐、最新发布。搜索框&#xff1a;支持音乐、专辑、艺人等的搜索。用户登录/注册入口。 用户注册和登录&#xff1a; 用户注册&#xff1a;输入用户名、密码、邮箱等信息。用户登录&#xff1a;输入用户名和密码。密码找…

如何在NXP源码基础上适配ELF 1开发板的PWM功能

本次源码适配项目是在NXP i.MX6ULL EVK评估板所搭载的Linux内核源码&#xff08;特定版本为Linux-imx_4.1.15&#xff09;基础上进行的&#xff0c;主要目标是通过调整功能接口引脚配置&#xff0c;使其适应ELF 1开发板。为了深入阐述这一适配过程&#xff0c;我们将以PWM功能的…

浏览器百科:网页存储篇-IndexedDB应用实例(十二)

1.引言 在现代Web开发中&#xff0c;IndexedDB作为一种强大的客户端存储技术&#xff0c;越来越受到开发者的青睐。它不仅能够存储大量结构化数据&#xff0c;还提供了高性能的查询和事务支持。在前面的文章中&#xff0c;我们已经详细介绍了IndexedDB的基本概念、使用方法以及…

RocketMQ 5.0简介

一、概述 Apache RocketMQ 自诞生以来&#xff0c;因其架构简单、业务功能丰富、具备极强可扩展性等特点被众多企业开发者以及云厂商广泛采用。历经十余年的大规模场景打磨&#xff0c;RocketMQ 已经成为业内共识的金融级可靠业务消息首选方案&#xff0c;被广泛应用于互联网、…

机器学习 第9章 聚类

目录 聚类任务性能度量距离计算原型聚类k均值&#xff08;K-Means&#xff09;算法学习向量量化 (LVQ)高斯混合聚类 密度聚类层次聚类 聚类任务 聚类是机器学习中一种重要的无监督学习方法&#xff0c;其目的是将数据集中的数据分成不同的聚类或组&#xff0c;使得同一簇内的样…

GenBook RK3588一款模块化开源ARM笔记本电脑,具有高达32GB内存和模块化扩展功能

GenBook RK3588 是一款以瑞芯微(Rockchip)RK3588为核心的开源笔记本电脑。这款功能强大的CPU集成了4个Cortex-A76、4个Cortex-A55内核和4个Mali G610 图形内核。具有6 TOPS算力的集成 NPU 单元可以有意义地提升本地机器学习任务。这款流行的新芯片允许用户使用许多流行的开源操…

c#进度条实现方法

在使用c#做WinFrom开发时&#xff0c;经常会用到进度条&#xff08;ProgressBar&#xff09;。那么如何才能实现winfrom进度条及进度信息提示呢&#xff1f; 方法一&#xff1a;多线程 使用c#做WinFrom开发&#xff0c;要实现进度条效果就需要用到多线程&#xff0c;如果不采…

【Burpsuite】使用宏更新header(如token)

我们有这样一个网站&#xff0c;登录完成之后&#xff0c;后续的每个请求都会带上jwt&#xff08;json web token&#xff09;去访问接口信息 此时&#xff0c;我们希望实现这样一个功能&#xff1a;当我没有带token或者token过期时&#xff0c;能够自动刷新token。那么就要用到…

C++的STL标准模板库容器--string类

目录 浅浅介绍一下什么是STL&#xff1a; string类需要知道的小知识 auto和范围for&#xff1a; string类的常用接口&#xff1a; 实现一个string类&#xff1a; 1. 成员变量和构造函数&#xff0c;拷贝构造&#xff0c;析构函数 2. string类对象的容量操作 <1>si…

书生浦语三期实战营 [进阶] 茴香豆:企业级知识问答工具实践闯关任务

茴香豆&#xff1a;企业级知识问答工具实践闯关任务 1 Web 版茴香豆 1.1 创建 Web 版茴香豆账户和密码 登录 https://openxlab.org.cn/apps/detail/tpoisonooo/huixiangdou-web&#xff0c;可以看到 Web 版茴香豆的知识库注册页面&#xff0c;在对应处输入想要创建的知识库名…

Spring Cloud 搭建 Gateway 网关与统一登录模块:路径重写、登录拦截、跨域配置

文章目录 一、项目结构项目依赖 二、搭建 Gateway 服务1. 配置 Gateway2. 配置跨域 三、统一登录模块1. 配置 Spring Security2. 创建 Security 配置3. 实现认证过滤器 四、总结 博主介绍&#xff1a;全网粉丝10w、CSDN合伙人、华为云特邀云享专家&#xff0c;阿里云专家博主、…