C语言34种运算符的用法解析

news2024/11/25 11:03:37

C 算术运算符

操作员运算符的含义
+加法或一元加法
-减法或一元减法
*乘法
/分配
%除法后的余数(模除)
// 算数运算符的使用
#include <stdio.h>
int main()
{
    int a = 9,b = 4, c;
    
    c = a+b;
    printf("a+b = %d \n",c);
    c = a-b;
    printf("a-b = %d \n",c);
    c = a*b;
    printf("a*b = %d \n",c);
    c = a/b;
    printf("a/b = %d \n",c);
    c = a%b;
    printf("a除以b的余数为 b= %d \n",c);
    
    return 0;
}

 

C 自增和自减运算符

C 编程有两个运算符递增++和递减,--用于将操作数(常量或变量)的值更改 1。

增量++将值增加 1,而减量--将值减少 1。这两个运算符是一元运算符,这意味着它们仅对单个操作数进行操作。

// 自增自减运算符的使用
#include <stdio.h>
int main()
{
    int a = 10, b = 100;
    float c = 10.5, d = 100.5;

    printf("++a = %d \n", ++a);
    printf("--b = %d \n", --b);
    printf("++c = %f \n", ++c);
    printf("--d = %f \n", --d);

    return 0;
}

C 赋值运算符

运算符举例相等
=a = ba = b
+=a += ba = a+b
-=a -= ba = a-b
*=a *= ba = a*b
/=a /= ba = a/b
%=a %= ba = a%b
//赋值运算符的使用
#include <stdio.h>
int main()
{
    int a = 5, c;

    c = a;      // c 为 5
    printf("c = %d\n", c);
    c += a;     // c 为 10 
    printf("c = %d\n", c);
    c -= a;     // c 为 5
    printf("c = %d\n", c);
    c *= a;     // c 为 25
    printf("c = %d\n", c);
    c /= a;     // 为 is 5
    printf("c = %d\n", c);
    c %= a;     // c = 0
    printf("c = %d\n", c);

    return 0;
}

 C 关系运算符

操作员运算符的含义例子
==等于5 == 3被评估为 0
>大于5 > 3被评估为 1
<少于5 < 3被评估为 0
!=不等于5 != 3被评估为 1
>=大于或等于5 >= 3被评估为 1
<=小于或等于5 <= 3被评估为 0
// 关系运算符的使用
#include <stdio.h>
int main()
{
    int a = 5, b = 5, c = 10;

    printf("%d == %d 是 %d \n", a, b, a == b);
    printf("%d == %d 是 %d \n", a, c, a == c);
    printf("%d > %d 是 %d \n", a, b, a > b);
    printf("%d > %d 是 %d \n", a, c, a > c);
    printf("%d < %d 是 %d \n", a, b, a < b);
    printf("%d < %d 是 %d \n", a, c, a < c);
    printf("%d != %d 是 %d \n", a, b, a != b);
    printf("%d != %d 是 %d \n", a, c, a != c);
    printf("%d >= %d 是 %d \n", a, b, a >= b);
    printf("%d >= %d 是 %d \n", a, c, a >= c);
    printf("%d <= %d 是 %d \n", a, b, a <= b);
    printf("%d <= %d 是 %d \n", a, c, a <= c);

    return 0;
}

 

C 逻辑运算符

包含逻辑运算符的表达式返回 0 或 1,具体取决于表达式结果是 true 还是 false。逻辑运算符常用于C 编程中的决策。

操作员意义例子
&&逻辑与。仅当所有操作数都为真时才为真如果 c = 5 且 d = 2,则表达式((c==5) && (d>5))等于 0。
||逻辑或。仅当任一操作数为真时才为真如果 c = 5 且 d = 2,则表达式((c==5) || (d>5))等于 1。
逻辑非。仅当操作数为 0 时才为 True如果 c = 5,则表达式!(c==5)等于 0。

// 逻辑运算符的使用规则

#include <stdio.h>
int main()
{
    int a = 5, b = 5, c = 10, result;   //result 用来存放结果

    result = (a == b) && (c > b);
    printf("(a == b) && (c > b) is %d \n", result);

    result = (a == b) && (c < b);
    printf("(a == b) && (c < b) is %d \n", result);

    result = (a == b) || (c < b);
    printf("(a == b) || (c < b) is %d \n", result);

    result = (a != b) || (c < b);
    printf("(a != b) || (c < b) is %d \n", result);

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

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

    return 0;
}

输出

(a == b) && (c > b) 为 1 
(a == b) && (c < b) 为 0 
(a == b) || (c < b) 是 1 
(a != b) || (c < b) 为 0 
!(a != b) 为 1 
!(a == b) 为 0
  • (a == b) && (c > 5)计算结果为 1,因为两个操作数(a == b)(c > b)都是 1(真)。
  • (a == b) && (c < b)计算结果为 0,因为操作数(c < b)为 0(假)。
  • (a == b) || (c < b)计算结果为 1,因为(a = b)为 1(真)。
  • (a != b) || (c < b)计算结果为 0,因为操作数(a != b)(c < b)均为 0(假)。
  • !(a != b)计算结果为 1,因为操作数(a != b)为 0(假)。因此,!(a != b) 为 1(真)。
  • !(a == b)计算结果为 0,因为(a == b)为 1(真)。因此,!(a == b)为 0(假)。

 C 位运算符

在计算过程中,加法、减法、乘法、除法等数学运算被转换为位级,这使得处理速度更快并节省功耗。

位运算符在 C 编程中用于执行位级运算。

运营商运算符的含义
&按位与
|按位或
^按位异或
按位求补
<<左移
>>右移

按位与运算符 &

如果两个操作数的相应位为1,则按位 AND 的输出为1。如果操作数的任一位为0,则相应位的结果将计算为0

在 C 编程中,按位 AND 运算符用 表示&

让我们假设两个整数1225的按位 AND 运算。

12 = 00001100(二进制)
25 = 00011001(二进制)

12和25的位运算
  00001100
& 00011001
  ________
  00001000 = 8(十进制)

事例按位与 

#include <stdio.h>

int main() {

    int a = 12, b = 25;
    printf("Output = %d", a & b);

    return 0;
}

结果

输出=8

按位或运算符 |

如果两个操作数的至少一个对应位为1,则按位 OR 的输出为1。在 C 编程中,按位 OR 运算符用 表示|

12 = 00001100(二进制)
25 = 00011001(二进制)

12 和 25 的按位或运算
  00001100
| 00011001
  ________
  00011101 = 29(十进制)

#include <stdio.h>

int main() {

    int a = 12, b = 25;
    printf("Output = %d", a | b);

    return 0;
}

 结果

输出 = 29

按位 XOR(异或)运算符 ^

如果两个操作数的相应位相反,则按位异或运算符的结果为1 。它用 表示^

12 = 00001100(二进制)
25 = 00011001(二进制)

12 和 25 的按位异或运算
  00001100
^00011001
  ________
  00010101 = 21(十进制)

#include <stdio.h>

int main() {

    int a = 12, b = 25;
    printf("Output = %d", a ^ b);

    return 0;
}

结果

输出 = 21

按位补码运算符 ~

按位求补运算符是一种一元运算符(仅适用于一个操作数)。它将1更改为0,将0更改为1。它用 表示~

35 = 00100011(二进制)

35 的按位求补运算
~ 00100011
  ________
  11011100 = 220(十进制)

C 编程中按位补码运算符的扭转

35 ( )的按位补码~35-36而不是220,但为什么呢?

对于任意整数n, 按位求补n将会-(n + 1)。要理解这一点,您应该了解 2 的补码。

2的补码

二进制补码是对二进制数的运算。一个数的 2 补码等于该数的补码加 1。例如:

十进制 二进制 2 的补码
   0 00000000 -(11111111+1) = -00000000 = -0(十进制)
   1 00000001 -(11111110+1) = -11111111 = -256(十进制)
   12 00001100 -(11110011+1) = -11110100 = -244(十进制)
   220 11011100 -(00100011+1) = -00100100 = -36(十进制)

注意:计算 2 的补码时,溢出被忽略。

35的按位补码是220(十进制)。220的 2 的补码是-36。因此,输出是-36而不是220

任何数字 N 的按位补码是 -(N+1)。就是这样:

N 的按位补码 = ~N(以 2 的补码形式表示)
~N 的 2' 补码= -(~(~N)+1) = -(N+1)

 按位补码

#include <stdio.h>

int main() {

    printf("Output = %d\n", ~35);
    printf("Output = %d\n", ~-12);

    return 0;
}

 输出

输出=-36
输出 = 11

C 编程中的移位运算符

C 语言编程中有两种移位运算符:

  • 右移运算符
  • 左移运算符。

右移运算符

右移运算符将所有位向右移动一定数量的指定位。它用 表示>>

212 = 11010100(二进制)
212 >> 2 = 00110101 (二进制) [右移两位]
212 >> 7 = 00000001(二进制)
212 >> 8 = 00000000
212 >> 0 = 11010100(无移位)

左移运算符

左移运算符将所有位向左移动一定数量的指定位。左移运算符空出的位用0填充。左移运算符的符号是<<

212 = 11010100(二进制)
212<<1 = 110101000 (二进制) [左移一位]
212<<0 = 11010100(移 0)
212<<4 = 110101000000(二进制)=3392(十进制)

 移位运算符

#include <stdio.h>

int main() {

    int num=212, i;

    for (i = 0; i <= 2; ++i) {
        printf("Right shift by %d: %d\n", i, num >> i);
    }
    printf("\n");

    for (i = 0; i <= 2; ++i) {
        printf("Left shift by %d: %d\n", i, num << i);    
    }

    return 0;
}

结果

右移 0:212
右移 1: 106
右移 2: 53

左移 0:212
左移 1:424
左移 2:848

逗号运算符

逗号运算符用于将相关表达式链接在一起。例如:

int a, c = 5, d;

运算符的大小

sizeof一个一元运算符,返回数据的大小(常量、变量、数组、结构体等)。

#include <stdio.h>
int main()
{
    int a;
    float b;
    double c;
    char d;
    printf("Size of int=%lu bytes\n",sizeof(a));
    printf("Size of float=%lu bytes\n",sizeof(b));
    printf("Size of double=%lu bytes\n",sizeof(c));
    printf("Size of char=%lu byte\n",sizeof(d));

    return 0;
}

结果

int 的大小 = 4 字节
浮点数的大小 = 4 字节
双精度数的大小 = 8 字节
字符大小 = 1 字节

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

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

相关文章

R语言环境下使用curl库做的爬虫代码示例

curl库是一个用于传输数据的工具和库&#xff0c;它支持多种协议&#xff0c;包括HTTP、FTP、SMTP等。在爬虫中&#xff0c;curl库可以用来获取网页内容&#xff0c;从而实现爬取网页的功能。通过设置curl的选项&#xff0c;可以实现对网页的请求、响应、重定向等操作。在使用c…

【前段基础入门之】=>CSS3新特性 @keyframes 动画

导语 在 CSS3 新特性中&#xff0c;新增了动画效果 的定义方式&#xff0c;这使得我们可以通过使用 CSS&#xff0c;从而开发出精美的动画效果&#xff0c;所以本章节&#xff0c;就来详细聊一聊如何通过 CSS 去创建一个动画效果案例 帧 **学习动画之前&#xff0c;我们得先了…

windows11 画图软件调整图片大小

win11自带的画图功能可以调整图片的大小和尺寸 搜索 画图&#xff0c;点击画图应用&#xff0c;打开图片 要把图片调整成800*1200。先打开文件菜单 选择图像属性 此处可以调整图片的尺寸和大小&#xff08;非等比例调整&#xff09; 选择图像下调整大小&#xff08;等比例调整…

什么叫SSH?原理详解,看这一篇就够了!

你们好&#xff0c;我的网工朋友。 SSH是一种加密的网络安全协议&#xff0c;用于安全地远程登录和执行命令。 目前SSH协议已经被全世界广泛使用&#xff0c;大多数设备都支持SSH功能。 但你真的会用吗&#xff1f; 今天就从SSH是什么、怎么用出发&#xff0c;给你详解一下之…

用AI魔法打败AI魔法

全文均为AI创作。 此为内容创作模板&#xff0c;在发布之前请将不必要的内容删除当前&#xff0c;AI技术的广泛应用为社会公众提供了个性化智能化的信息服务&#xff0c;也给网络诈骗带来可乘之机&#xff0c;如不法分子通过面部替换语音合成等方式制作虚假图像、音频、视频仿…

知识注入以对抗大型语言模型(LLM)的幻觉11.6

知识注入以对抗大型语言模型&#xff08;LLM&#xff09;的幻觉 摘要1 引言2 问题设置和实验2.1 幻觉2.2 生成响应质量 3 结果和讨论3.1 幻觉3.2 生成响应质量 4 结论和未来工作 摘要 大型语言模型&#xff08;LLM&#xff09;内容生成的一个缺点是产生幻觉&#xff0c;即在输…

el-select多选以tag展示时,超过显示长度以...省略号显示,且在一行展示

效果&#xff1a; 代码&#xff1a; <span>系统词典维度&#xff1a;</span><el-selectv-model"dNum"placeholder"请选择"multiplecollapse-tags //设置collapse-tags属性将它们合并为一段文字size"small"style"width:160p…

宏转录组分析揭示不同土壤生境中氮循环基因的表达

发表期刊&#xff1a;msystems 发表时间&#xff1a;2023 影响因子&#xff1a;6.4 DOI: 10.1128/msystems.00315-23 01、研究背景 与空白土壤相比&#xff0c;植物根系和根际细菌之间的相互作用调节了氮&#xff08;N&#xff09;的循环过程&#xff0c;并创造了富含低分…

维乐 Prevail Glide带你做破风王者,无阻前行!

对于自行车骑手来说&#xff0c;需要应对的问题有很多&#xff0c;其中最大的问题之一&#xff0c;就是「风阻」。风阻永远都是你越反抗越强&#xff0c;因此为了克服风阻的力量&#xff0c;时间久了&#xff0c;身体自然会造成一定程度的损伤。如何才能调整前行的步伐&#xf…

《006.Springboot+vue之旅游信息推荐系统》【有文档】

《006.Springbootvue之旅游信息推荐系统》【有文档】 项目简介 [1]本系统涉及到的技术主要如下&#xff1a; 推荐环境配置&#xff1a;DEA jdk1.8 Maven MySQL 前后端分离; 后台&#xff1a;SpringBootMybatis; 前台&#xff1a;vueElementUI; [2]功能模块展示&#xff1a; …

VSCode配置SonarLint/SonarLint连接SonarQube

本文介绍前端开发工具vscode安装sonarlint插件&#xff0c;配置本地代码扫描步骤 点击VSCode左侧工具栏的“扩展”&#xff0c;搜索“SonarLint”并安装插件 插件安装完成后&#xff0c;点击VSCode顶部工具栏的“查看”→“打开视图…”&#xff0c;并点击弹窗中的“SonarLint…

keil代码编辑区配色方案

第一步找到global.prop文件打开 ### 第二步复制下面的文本替换global.prop的内容&#xff0c;保存。 # properties for all file types indent.automatic1 virtual.space0 view.whitespace0 view.endofline0 code.page936 caretline.visible1 highlight.matchingbraces1 prin…

什么是 HwameiStor?

HwameiStor 是一款 Kubernetes 原生的容器附加存储 (CAS) 解决方案&#xff0c;将 HDD、SSD 和 NVMe 磁盘形成本地存储资源池进行统一管理&#xff0c; 使用 CSI 架构提供分布式的本地数据卷服务&#xff0c;为有状态的云原生应用或组件提供数据持久化能力。 具体的功能特性如下…

6款优质办公软件,个个都是效率神器,可免费使用

今天给大家分享6款优质的办公软件&#xff0c;这些软件不仅功能强大&#xff0c;还可以免费使用&#xff0c;让你高效完成工作。 Todo清单——待办事项软件 Todo清单是一款强大的跨平台待办事项和时间管理软件。它可以帮助用户记录、跟踪和完成待办事项。通过创建清单&#xff…

操作系统——逻辑结构 vs 物理结构(王道视频 p63)

1.总体概述&#xff1a; 其实&#xff0c;就是讲述了一件事情&#xff0c; 文件内的内容结构——其实完全由用户定义&#xff0c;在操作系统看来&#xff0c;就是“bit串” 文件的物理结构&#xff0c;就是说这个“bit串”整体在操作系统的控制下怎么存储在外存中

RLHF的替代算法之DPO原理解析:从Zephyr的DPO到Claude的RAILF

前言 本文的成就是一个点顺着一个点而来的&#xff0c;成文过程颇有意思 首先&#xff0c;如上文所说&#xff0c;我司正在做三大LLM项目&#xff0c;其中一个是论文审稿GPT第二版&#xff0c;在模型选型的时候&#xff0c;关注到了Mistral 7B(其背后的公司Mistral AI号称欧洲…

人工智能:一种现代的方法 第三章 经典搜索 上

文章目录 人工智能&#xff1a;一种现代的方法 第三章 经典搜索 上3.1 问题求解智能体3.2 问题实例3.2.1八数码问题3.2.2八皇后问题 3.3 搜索3.3.1搜索树3.3.2 树搜索3.3.3 图搜索3.3.4 问题求解算法的性能 第三章 经典搜索 上 总结 人工智能&#xff1a;一种现代的方法 第三章…

【kali忘记密码解决办法】

&#x1f9cb;1、kali忘记密码 &#x1f9c9;2、重启不停的按【E】&#xff08;输入法为英文状态&#xff09;键进入启动前编辑命令&#xff08;若系统没有出现这个页面&#xff0c;尝试重启以此来进入引导界面&#xff09; &#x1f379;3、进入启动前编辑命令界面后&#x…

Colab: 运行Python代码的一个平台

网站&#xff1a; https://colab.sandbox.google.com/ 该网站默认情况下已经安装了tenorflow和tensorflow_probably。 Colab是运行Python代码的一个平台&#xff0c;当你的笔记本中没有安装任何Python环境&#xff0c;而又需要安装Python时&#xff0c;可以在Colab上轻便的运…

反转链表OJ题

反转链表OJ题 文章目录 反转链表OJ题题目&#xff1a;分析及代码实现:循环思想递归思想 题目&#xff1a; 分析及代码实现: 循环思想 ①新开辟一个空链表&#xff0c;我们将原链表里的元素进行头插&#xff0c;实现反转。 struct ListNode* reverseList(struct ListNode* he…