“探索C语言操作符的神秘世界:从入门到精通的全方位解析“

各位少年,我是博主那一脸阳光,今天来分享深度解析C语言操作符,C语言操作符能帮我们解决很多逻辑性的问题,减少很多代码量,就好比数学的各种符号,我们现在深度解剖一下他们。

前言

在追求爱情的道路上,拥有吸引人的外表与内在气质固然重要,它们如同璀璨星辰,为你的个人魅力增光添彩。然而,真诚的情感交流和恰到好处的方式方法,更是搭建心桥、拉近彼此距离的关键所在。这些小手段并非是欺骗或伪装,而是用心去了解对方的需求,用行动表达自己的诚意,通过细微之处展现关爱与尊重。

比如,学会倾听,理解她的内心世界;适时给予鼓励和支持,让她感受到你的力量和温暖;或者是在日常生活中制造些微小而甜蜜的惊喜,让她看见你独特的浪漫与体贴。这些“小手段”,实则是情感智慧的体现,它们将帮助你在赢得芳心的旅程中,既能展现出真实的自我,又能以最适宜的方式打动她的心扉。

C语言操作符分类

操作符的分类
• 算术操作符: + 、- 、* 、/ 、%
• 移位操作符: << >>
• 位操作符: `& | ^

• `赋值操作符: = 、+= 、 -= 、 = 、 /= 、%= 、<<= 、>>= 、&= 、|= 、^=
• 单⽬操作符: !、++、–、&、
、+、-、~ 、sizeof、(类型)
• 关系操作符: > 、>= 、< 、<= 、 == 、 !=
• 逻辑操作符: && 、||
• 条件操作符: ? :
• 逗号表达式: ,
• 下标引⽤: []
• 函数调⽤: ()
• 结构成员访问: . 、->

⼆进制和进制转换

其实我们经常能听到2进制、8进制、10进制、16进制这样的讲法,那是什么意思呢?其实2进制、8进
制、10进制、16进制是数值的不同表⽰形式⽽已。
⽐如:数值15的各种进制的表⽰形式:

152进制:1111
158进制:17
1510进制:15
1516进制:F

我们重点介绍⼀下⼆进制:
⾸先我们还是得从10进制讲起,其实10进制是我们⽣活中经常使⽤的,我们已经形成了很多尝试:
• 10进制中满10进1
• 10进制的数字每⼀位都是0~9的数字组成
其实⼆进制也是⼀样的
• 2进制中满2进1
• 2进制的数字每⼀位都是0~1的数字组成
那么 1101 就是⼆进制的数字了。

2进制转10进制

其实10进制的123表⽰的值是⼀百⼆⼗三,为什么是这个值呢?其实10进制的每⼀位是权重的,10进
制的数字从右向左是个位、⼗位、百位…,分别每⼀位的权重是 10 , 10 , 10 …
2进制和10进制是类似的,只不过2进制的每⼀位的权重,从右向左是: 2 , 2 , 2 … 0 1 2
如果是2进制的1101.
在这里插入图片描述
8进制的数字每⼀位是07的,07的数字,各⾃写成2进制,最多有3个2进制位就⾜够了,⽐如7的⼆
进制是111,所以在2进制转8进制数的时候,从2进制序列中右边低位开始向左每3个2进制位会换算⼀
个8进制位,剩余不够3个2进制位的直接换算。
如:2进制的01101011,换成8进制:0153,0开头的数字,会被当做8进制。

2进制转8进制

8进制的数字每⼀位是07的,07的数字,各⾃写成2进制,最多有3个2进制位就⾜够了,⽐如7的⼆
进制是111,所以在2进制转8进制数的时候,从2进制序列中右边低位开始向左每3个2进制位会换算⼀
个8进制位,剩余不够3个2进制位的直接换算。
如:2进制的01101011,换成8进制:0153,0开头的数字,会被当做8进制。
在这里插入图片描述

原码、反码、补码

整数的2进制表⽰⽅法有三种,即原码、反码和补码
有符号整数的三种表⽰⽅法均有符号位和数值位两部分,2进制序列中,最⾼位的1位是被当做符号
位,剩余的都是数值位。
符号位都是⽤0表⽰“正”,⽤1表⽰“负”。
正整数的原、反、补码都相同。
负整数的三种表⽰⽅法各不相同。
原码:直接将数值按照正负数的形式翻译成⼆进制得到的就是原码。
反码:将原码的符号位不变,其他位依次按位取反就可以得到反码。
补码:反码+1就得到补码。
反码得到原码也是可以使⽤:取反,+1的操作。
对于整形来说:数据存放内存中其实存放的是补码
为什么呢?
在计算机系统中,数值⼀律⽤补码来表⽰和存储。原因在于,使⽤补码,可以将符号位和数值域统⼀
处理;同时,加法和减法也可以统⼀处理(CPU只有加法器)此外,补码与原码相互转换,其运算
过程是相同的,不需要额外的硬件电路。

移位操作符

<<左移操作符,把某个整数必须是整数左移一位以后计算后的结果,请看下面代码演示过程

 int main(){inr m=10;int n=m<<1;printf("n=%d\n",n);printf("m=%d\n",n);return 0;}

在这里插入图片描述

右移操作符

移位规则:⾸先右移运算分两种:

  1. 逻辑右移:左边⽤0填充,右边丢弃
  2. 算术右移:左边⽤原该值的符号位填充,右边丢弃
3. #include <stdio.h>
int main()
{int num = 10;int n = num>>1;printf("n= %d\n", n);printf("num= %d\n", num);return 0;
}

在这里插入图片描述
在这里插入图片描述
警告⚠️:对于移位运算符,不要移动负数位,这个是标准未定义的。
例如:

int num = 10;
num>>-1;//error

位操作符 & | ^ ~

& //按位与
| //按位或
^ //按位异或
~ //按位取反```

``他们的操作数必须是整数。
直接上代码:

#include <stdio.h>
int main()
{int num1 = -3;int num2 = 5;printf("%d\n", num1 & num2);printf("%d\n", num1 | num2);printf("%d\n", num1 ^ num2);printf("%d\n", ~0);return 0;}

⼀道变态的⾯试题:
不能创建临时变量(第三个变量),实现两个数的交换。

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

``练习1:编写代码实现:求⼀个整数存储在内存中的⼆进制中1的个数。

#include <stdio.h>
int main()
{int num = 10;int count= 0;//计数while(num){if(num%2 == 1)count++;num = num/2;}printf("⼆进制中1的个数 = %d\n", count);return 0;
}
//思考这样的实现⽅式有没有问题?
//⽅法2:
#include <stdio.h>
int main()
{int num = -1;int i = 0;int count = 0;//计数for(i=0; i<32; i++){if( num & (1 << i) )count++; }printf("⼆进制中1的个数 = %d\n",count);return 0;
}
//思考还能不能更加优化,这⾥必须循环32次的。
//⽅法3:
#include <stdio.h>
int main()
{int num = -1;int i = 0;int count = 0;//计数while(num){count++;num = num&(num-1);}printf("⼆进制中1的个数 = %d\n",count);return 0;
练习2:⼆进制位置0或者置1
编写代码将13⼆进制序列的第5位修改为1,然后再改回0
132进制序列: 00000000000000000000000000001101
将第5位置为1后:00000000000000000000000000011101
将第5位再置为000000000000000000000000000001101
#include <stdio.h>
int main()
{int a = 13;a = a | (1<<4);printf("a = %d\n", a);a = a & ~(1<<4);printf("a = %d\n", a);return 0;
}

单⽬操作符
单⽬操作符有这些:
!、++、–、&、、+、-、~ 、sizeof、(类型)
单⽬操作符的特点是只有⼀个操作数,在单⽬操作符中只有&和
没有介绍,这2个操作符,我们放在学
习指针的时候学习。
7. 逗号表达式
1 exp1, exp2, exp3, …expN
逗号表达式,就是⽤逗号隔开的多个表达式
逗号表达式,从左向右依次执⾏。整个表达式的结果是最后⼀个表达式的结果。

//代码1
int a = 1;
int b = 2;
int c = (a>b, a=b+10, a, b=a+1);//逗号表达式
c是多少?
//代码2
if (a =b + 1, c=a / 2, d > 0)
//代码3
a = get_val();
count_val(a);
while (a > 0)
{//业务处理a = get_val();count_val(a);
}
如果使⽤逗号表达式,改写:
while (a = get_val(), count_val(a), a>0)
{//业务处理
}

下标访问[]、函数调⽤()
8.1 [ ] 下标引⽤操作符
操作数:⼀个数组名 + ⼀个索引值
int arr[10];//创建数组
arr[9] = 10;//实⽤下标引⽤操作符。
[ ]的两个操作数是arr和9。
8.2 函数调⽤操作符
接受⼀个或者多个操作数:第⼀个操作数是函数名,剩余的操作数就是传递给函数的参数。

void test1()
{printf("hehe\n");
}
void test2(const char *str)
{printf("%s\n", str);
}
int main()
{test1(); //这⾥的()就是作为函数调⽤操作符。test2("hello bit.");//这⾥的()就是函数调⽤操作符。return 0;
}

结尾语

在探讨爱情艺术与人际交往的智慧之余,让我们切换到编程的世界。在C语言中,操作符同样是构建程序逻辑、实现数据交互的关键工具。例如:

算术操作符如同感情中的互动交流:加号(+)就像两人之间的共享和增进;减号(-)类似在解决问题时彼此的支持与分担;乘号(*)犹如双方情感的交织与深化;除法(/)则好比通过沟通与理解来化解分歧或达成共识;取余操作符(%)像是在日常生活的小细节中发现惊喜,找到彼此个性的独特之处。

移位操作符则是更为精密的情感调控机制:左移操作符(<<)可以类比为共同成长中对对方潜力的激发与信任;右移操作符(>>)就如同在适当的时候给予对方空间和独立性,让关系得到平衡与舒展。

通过熟练掌握这些C语言操作符的运用,程序员能够更精准地控制程序流程,正如在追求爱情的过程中,巧妙运用各种“小手段”,有助于我们更好地建立和维护人际关系,从而抵达真爱的彼岸。

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

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

相关文章

深入浅出AI落地应用分析:AI视频生成Top 5应用

接下俩会每周集中体验一些通用或者垂直的AI落地应用&#xff0c;主要以一些全球或者国外国内排行较前的产品为研究对象&#xff0c;「AI 产品榜&#xff1a; aicpb.com」以专题的方式在博客进行分享。 一、Loom 二、Runway 产品链接&#xff1a;https://app.runwayml.com/ …

ubuntu 22.04 安装mysql-8.0.34

ubuntu 22.04 安装mysql-8.0.34 1、基础安装配置 更新软件包&#xff1a; sudo apt update查看可用软件包&#xff1a; sudo apt search mysql-server安装最新版本&#xff1a; sudo apt install -y mysql-server或者&#xff0c;安装指定版本&#xff1a; sudo apt inst…

【Python程序开发系列】并发执行协程任务超时的解决方案(案例分析)

一、问题 假如我在利用协程并发执行任务的时候&#xff0c;会出现有些任务特别耗时&#xff0c;从而导致程序运行卡住&#xff0c;我们想跳过这些执行特别耗时的任务&#xff0c;只返回不超时的任务结果该怎么解决&#xff1f; 二、实现过程 2.1 情景 假如我有四个任务需要并…

Python学习之路-Flask项目:开发准备

Python学习之路-Flask项目:开发准备 前言 前面几篇学习了Flask的基础知识&#xff0c;从今天开始开发一个个人博客项目来练练手。 项目分析 关于个人博客的Web项目&#xff0c;主要为自己提供一个记录与技术输出的平台。以个人编写或者转载优秀的文章作为博文的主要来源基于…

MySQL--删除数据表(6)

MySQL中删除数据表是非常容易操作的&#xff0c;但是你在进行删除表操作时要非常小心&#xff0c;因为执行删除命令后所有数据都会消失。 语法 以下为删除 MySQL 数据表的通用语法&#xff1a; DROP TABLE table_name ; -- 直接删除表&#xff0c;不检查是否存在 或 DROP…

力(FFT,acwing2313)

题目路径&#xff1a; https://www.acwing.com/problem/content/2315/ 思路&#xff1a;

Python可执行文件的转换

当开发者向普通用户分享程序时&#xff0c;为了方便用户在未安装Python环境的情况 下能够正常运行&#xff0c;需要将开发好的程序进行打包&#xff0c;转换成用户可运行的文件类 型。本节将介绍在Windows和Linux两种系统下&#xff0c;将Python类型的文件转换成可执 行文件的方…

netty: MessageToMessageCodec的用法

一、定义类&#xff0c;继承MessageToMessageCodec&#xff0c;重写encode和decode方法 package cn.edu.tju;import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.MessageToMes…

编码风格之(5)GNU软件编码风格(3)

GNU软件编码标准风格(3) Author&#xff1a;Onceday Date: 2024年1月21日 漫漫长路&#xff0c;才刚刚开始… 本文主要翻译自《GNU编码标准》(GNU Coding Standards)一文。 参考文档: Linux kernel coding style — The Linux Kernel documentationGNU Coding Standard…

kotlin $ (字符串模版)的使用

$ 在kotlin 中当做字符串模版使用&#xff0c;作用就是在字符串里面识别自己定义的字符 例如打印一个字符 这个时候编译就提示我们使用字符串模版的是个 $ 的作用就是识别字符串里面的i 字数有点少了&#xff0c;在写一个demo private fun String.appendArchive(): String …

java-集合-List集合

List集合 java.util.List接口,继承自Collection. List集合是可重复集,并且有序,提供了一套可以通过下标操作元素的方法 常用实现类: - java.util.ArrayList:内部使用数组实现,查询性能更好. - java.util.LinkedList:内部使用链表实现,首尾增删元素性能更好. List集合常见方法…

云手机与实体手机的对比

在数字化时代&#xff0c;云手机作为一种虚拟手机在云端服务器上运行&#xff0c;与传统的实体手机相比存在诸多差异。让我们深入探讨云手机与实体手机之间的区别&#xff0c;以便更好地了解它们的特点和优势。 外观上的差异 实体手机具有实际的外观和重量&#xff0c;占据一定…

Spring Boot整合XXL-Job

Spring Boot整合XXL-Job 大家好&#xff0c;我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天&#xff0c;我们将探讨如何在Spring Boot项目中整合XXL-Job&#xff0c;一个分布式任务…

编译安装Nginx和使用五种算法实现Nginx反向代理负载均衡

目录 Ubuntu中安装Nginx 概念介绍 负载均衡 几种负载均衡算法 反向代理 环境规划 配置反向代理 加权负载均衡&#xff08;Weighted Load Balancing&#xff09; 轮询&#xff08;Round Robin&#xff09; IP 哈希&#xff08;IP Hash&#xff09; 最少连接&#xff…

多维时序 | Matlab实现EVO-TCN-Multihead-Attention能量谷算法优化时间卷积网络结合多头注意力机制多变量时间序列预测

多维时序 | Matlab实现EVO-TCN-Multihead-Attention能量谷算法优化时间卷积网络结合多头注意力机制多变量时间序列预测 目录 多维时序 | Matlab实现EVO-TCN-Multihead-Attention能量谷算法优化时间卷积网络结合多头注意力机制多变量时间序列预测效果一览基本介绍程序设计参考资…

Spring5系列学习文章分享---第四篇(JdbcTemplate+概念配置+增删改查数据+批量操作 )

目录 JdbcTemplateJdbcTemplate&#xff08;概念和准备&#xff09;JdbcTemplate 操作数据库&#xff08;新增update&#xff09;JdbcTemplate 操作数据库&#xff08;修改和删除update&#xff09;JdbcTemplate 操作数据库&#xff08;查询返回某个值queryForObject&#xff0…

shopee的AI学习之路——GPTs通过AdInteli 广告变现

GPTs|AdInteli 广告变现 一、什么是 AdInteli AdIntelli 是一个旨在为生成 GPTs 接入广告并实现变现的平台。它连接了全球最大的广告联盟&#xff0c;允许广告商进行竞价&#xff0c;确保展示最有价值的广告。AdIntelli 采用 AI 驱动的收入生成技术&#xff0c;优化广告选择。…

安卓MediaRecorder(4)视频采集编码写入详细源码分析

文章目录 前言视频采集视频编码视频编码写入结语 本文首发地址 https://blog.csdn.net/CSqingchen/article/details/134896821 最新更新地址 https://gitee.com/chenjim/chenjimblog 前言 通过 文2 我们知道了 MediaRecorder 各个接口 Framework 中的实现。 通过 文3 我们 知道…

<网络安全>《5 网络安全产品之网关》

1 基础概念 网关(Gateway)又称网间连接器、协议转换器。 网关在网络层以上实现网络互连&#xff0c;是复杂的网络互连设备&#xff0c;仅用于两个高层协议不同的网络互连。 网关既可以用于广域网互连&#xff0c;也可以用于局域网互连。 网关是一种充当转换重任的计算机系统或…

《游戏-03_3D-开发》之—新输入系统人物移动攻击连击

本次修改unity的新输入输出系统。本次修改unity需要重启&#xff0c;请先保存项目&#xff0c; 点击加号起名为MyCtrl&#xff0c; 点击加号设置为一轴的&#xff0c; 继续设置W键&#xff0c; 保存 生成自动脚本&#xff0c; 修改MyPlayer代码&#xff1a; using UnityEngine;…