C语言初阶七:C语言操作符详解(1)

#1024程序员节|征文#

这篇文章是对之前文章中操作符的补充,可以看之前的文章:C语言初阶:六.算数操作_如何用编程表示除法-CSDN博客

  C语言操作符是用于执行各种运算和操作的符号。包括算术操作符(如+、-、*、/、%),用于基本数学运算;关系操作符(如==、!=、>、<、>=、<=),用于比较两个值;逻辑操作符(如&&、||、!),用于布尔逻辑运算;位操作符(如&、|、^、~、<<、>>),用于直接操作二进制位;还有赋值操作符(如=、+=、-=等),用于给变量赋值。这些操作符是C语言编程的基础。

1. 操作符分类

算术操作符        移位操作符

位操作符         赋值操作符

单目操作符         关系操作符

逻辑操作符         条件操作符

逗号表达式         下标引用、函数调用和结构成员

2. 算术操作符

+    -   *   /   %

1. 除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数。 2. 对于 / 操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法。 3. % 操作符的两个操作数必须为整数。返回的是整除之后的余数。

3. 移位操作符

左移操作符 <<

右移操作符 >> 

 注:移位操作符的操作数只能是整数。

//2进制
//整数的2进制表示方式有三种
//        原码,补码,反码
//在内存中,存储的是补码的二进制
//所以在参与移位的时候,移动后都是补码

3.1 左移操作符

移位规则: 左边抛弃、右边补0'

int main()
{int a = 10;int b = a << 1;//00000000000000000000000000001010 - a的补码进行左移printf("%d\n", a);printf("%d\n", b);return 0;
}

3.2 右移操作符

移位规则( 首先右移运算分两种):

1. 逻辑移位 左边用0填充,右边丢弃

2. 算术移位 左边用原该值的符号位填充,右边丢弃

int main()
{int a = -1;//100000000000000000000000000000001  --原码//111111111111111111111111111111110  --反码//111111111111111111111111111111111  --补码//int b = a >> 1;printf("a=%d\n", a);printf("b=%d\n", b);//算数右移return 0;
}

警告⚠ : 对于移位运算符,不要移动负数位,这个是标准未定义的。

例如:

int num = 10;

num>>-1;//error

4. 位操作符

位操作符有:

&  //按位与

|   //按位或

^  //按位异或

注:他们的操作数必须是整数

int main()
{int a = 3;//00000000000000000000000000000011int b = -5;//10000000000000000000000000000101//11111111111111111111111111111010//11111111111111111111111111111011  --补码int c = a & b;//00000000000000000000000000000011//11111111111111111111111111111011//00000000000000000000000000000011---> 3,打印3//按位与规则:有0则为0,全为1,则为1printf("c=%d\n", c);//c=3return 0;
}
  |   按位或
按位或规则:有1则为1,全为0,则为0int main()
{int a = 3;//00000000000000000000000000000011int b = -5;//10000000000000000000000000000101//11111111111111111111111111111010//11111111111111111111111111111011  --补码int c = a | b;//00000000000000000000000000000011//11111111111111111111111111111011//11111111111111111111111111111011----> -5//按位或规则:有1则为1,全为0,则为0printf("c=%d\n", c);//c=-5return 0;
}
  ^  按位异或   1.可读性差,2.效率不如使用临时变量的方法  3.异或只能交换整数(局限)按位或规则:相同为0,相异为1
a^a=0
0^a=a
异或支持交换律int main()
{int a = 3;//00000000000000000000000000000011int b = -5;//10000000000000000000000000000101//11111111111111111111111111111010//11111111111111111111111111111011  --补码int c = a ^ b;//00000000000000000000000000000011//11111111111111111111111111111011//11111111111111111111111111111000--->c的补码// 1000000000000000000000000000111// 1000000000000000000000000001000--->原码  c=-8//按位或规则:相同为0,相异为1printf("c=%d\n", c);//c=-8return 0;
}

5. 赋值操作符

赋值操作符是一个很棒的操作符,他可以让你得到一个你之前不满意的值。也就是你可以给自己重新赋值。

int weight = 120;//体重

weight = 89;//不满意就赋值

double salary = 10000.0;

salary = 20000.0;//使用赋值操作符赋值

赋值操作符可以连续使用,比如:

int a = 10;

int x = 0;

int y = 20;

a = x = y+1;//连续赋值 这样的代码感觉怎么样?

那同样的语义,你看看:

x = y+1;

a = x; 这样的写法是不是更加清晰爽朗而且易于调试

复合赋值符 +=    -=    *=   /=   %=   >>=

这些运算符都可以写成复合的效果。 比如:

int x = 10;

x = x+10;

x += 10;//复合赋值

//其他运算符一样的道理。这样写更加简洁

6. 单目操作符

6.1 单目操作符介绍

!           逻辑反操作

-           负值

+           正值

&           取地址

sizeof      操作数的类型长度(以字节为单位)

~           对一个数的二进制按位取反 --          

前置、后置-- ++        

前置、后置++ *          

*      间接访问操作符(解引用操作符)

(类型)       强制类型转换

演示代码:

#include <stdio.h>
int main()
{int a = -10;int *p = NULL;printf("%d\n", !2);printf("%d\n", !0);a = -a;p = &a;printf("%d\n", sizeof(a));printf("%d\n", sizeof(int));printf("%d\n", sizeof a);//这样写行不行?printf("%d\n", sizeof int);//这样写行不行?return 0;
}

6.2 sizeof 和 数组

关于sizeof其实我们之前已经见过了,可以求变量(类型)所占空间的大小。

#include <stdio.h>
void test1(int arr[])
{printf("%d\n", sizeof(arr));//(2)
}
void test2(char ch[])
{printf("%d\n", sizeof(ch));//(4)
}
int main()
{int arr[10] = {0};char ch[10] = {0};printf("%d\n", sizeof(arr));//(1)printf("%d\n", sizeof(ch));//(3)test1(arr);test2(ch);return 0;
}

7. 关系操作符

>

>=

<  

<=

!=       用于测试“不相等”

==      用于测试“相等”

这些关系运算符比较简单,没什么可讲的,但是我们要注意一些运算符使用时候的陷阱。

警告: 在编程的过程中== 和=不小心写错,导致的错误。

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

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

相关文章

Python URL编码

在 Python 中&#xff0c;可以使用 urllib.parse模块对 URL 进行编码。 一、依赖安装 pip install urllib 二、URL编码 from urllib.parse import quoteurl rhttps://myshop.com/shop/shopList?query query {"id":14,"pageSize":10,"pageNum&quo…

[软件工程]—桥接(Brige)模式与伪码推导

桥接&#xff08;Brige&#xff09;模式与伪码推导 1.基本概念 1.1 动机 由于某些类型的固有的实现逻辑&#xff0c;使它们具有两个变化的维度&#xff0c;乃至多个维度的变化。如何应对这种“多维度的变化”&#xff1f;如何利用面向对象技术是的类型可以轻松的沿着两个乃至…

新鲜出炉面试题之【说说spring spring MVC spring boot的区别】

Spring MVC 和 Spring Boot 是 Spring 框架的一部分&#xff0c;但它们的目的和用途有所不同。下面详细阐述这两者之间的区别。 1. 概念 Spring MVC&#xff1a; Spring MVC 是一种基于请求-响应模式的 Web 框架&#xff0c;属于 Spring 框架的一部分。它提供了一种分离的方式…

html 轮播图效果

轮播效果&#xff1a; 1、鼠标没有移入到banner,自动轮播 2、鼠标移入&#xff1a;取消自动轮播、移除开始自动轮播 3、点击指示点开始轮播到对应位置 4、点击前一个后一个按钮&#xff0c;轮播到上一个下一个图片 注意 最后一个图片无缝滚动&#xff0c;就是先克隆第一个图片…

【树莓派系统安装】Raspberry Pi OS操作系统烧录与VNC远程树莓派实战

文章目录 前言1. 使用 Raspberry Pi Imager 安装 Raspberry Pi OS2. Windows安装VNC远程树莓派3. 使用VNC Viewer公网远程访问树莓派3.1 安装Cpolar步骤3.2 配置固定的公网地址3.3 VNC远程连接测试 4. 固定远程连接公网地址4.1 固定TCP地址测试 前言 本文主要介绍如何在树莓派…

Linux使用Dockerfile部署Tomcat以及jdk

资源准备 首先提供本教程所有资源包。 当然也可以根据自己需求去官网下载。 链接&#xff1a;百度网盘 请输入提取码 提取码&#xff1a;f31y #我们开始吧 首先我们需要一台linux操作系统的机器&#xff0c;当然windows也是可以的&#xff0c;本系列教程是基于Linux的&#…

利用数据库过滤和元数据提取提升多跳查询的RAG性能

人工智能咨询培训老师叶梓 转载标明出处 大模型在处理需要从多个文档中检索和推理信息的多跳查询时&#xff0c;常常表现不佳&#xff0c;因为它们需要从多个来源检索和推理证据。图1展示了一个简单的RAG实现用于MultiHop-RAG查询。图中显示了用户查询、嵌入向量数据库、提示&…

解决:git SSL certificate problem: unable to get local issuer certificate

在使用Git进行代码交流和版本控制过程中&#xff0c;可能会遇到SSL证书问题。这通常是由于Git客户端无法验证SSL证书的合法性而引起的。当我们尝试与Git服务器建立安全连接时&#xff0c;Git客户端将会验证服务器端提供的SSL证书是否由受信任的证书颁发机构&#xff08;Certifi…

三数之和(15)

打回现实的一道题 思路&#xff1a;先将数组进行排序 遍历数组&#xff0c;使用left标记i1,right标记nums.length-1 如果三数之和(nums[i]nums[left]nums[right])大于0&#xff0c;right--,如果小于0&#xff0c;left 注意&#xff1a;1、使用set集合进行去重 2、找到…

链路分析对性能测试的意义

目录 一、白盒能力的提升 二、人员技术门槛的提升 链路分析的出现对测试工程师也带来了不同的影响&#xff0c;能实际提升测试工程师的分析能力&#xff0c;但是需要测试工程师具备主动的自我提升意识。 一、白盒能力的提升 传统的性能测试主要以TPS、响应时间、成功率等用户…

【工具】Ghidra|Ghidra 安装过程以及脚本运行方式

文章目录 前言安装 java下载 Ghidra打开 Ghidra 使用 Ghidra步骤 1&#xff1a;打开 Ghidra 并加载项目步骤 2&#xff1a;打开 Script Manager步骤 3&#xff1a;新建脚本并编写代码步骤 4&#xff1a;保存脚本步骤 5&#xff1a;运行脚本注意事项 前言 我的用途&#xff1a;…

【Prometheus】为Prometheus设置basic_auth访问权限

Prometheus目前已经成为国、内外互联网行业&#xff0c;一款非常知名的免费监控工具&#xff0c;我们可以通过它&#xff0c;以及Prometheus官方、第三方提供的一些exporter工具&#xff0c;对系统、中间件、数据库等一系列的软、硬件的运行数据&#xff0c;进行采集、存储、监…

【在Win11下安装ubuntu +图形化界面】

在win11下安装ubuntu 一、安装流程1. 前期准备&#xff1a;先配置好基础设置2. 安装 ubuntu3. ubuntu进行配置4. 下载图形化界面 并安装 二、遇到的问题问题1. win11安装wsl报错&#xff1a;无法解析服务器的名称或地址1. 方法一&#xff1a;更改DNS&#xff08;对本人无效&…

Java8中Stream、Function、Opotions特性使用案例

所有数据都基于UserInfo类&#xff0c;其中包含了 userId、userName、course、score 等字段&#xff0c;下面是如何使用Options、 Stream 、Function来处理 UserInfo 对象列表的一些示例 List<UserInfo> userInfoList Arrays.asList(new UserInfo(1L, "Alice"…

闯关leetcode——206. Reverse Linked List

大纲 题目地址内容 解题代码地址 题目 地址 https://leetcode.com/problems/reverse-linked-list/ 内容 Given the head of a singly linked list, reverse the list, and return the reversed list. Example 1: Input: head [1,2,3,4,5] Output: [5,4,3,2,1] Example 2:…

【23CSPJ普及组】一元二次方程(uqe)

时间限制: 1000 ms 内存限制: 524288 KB 【题目描述】 众所周知&#xff0c;对一元二次方程 &#x1d44e;&#x1d44f;&#x1d465;&#x1d450;0,(&#x1d44e;≠0)&#xff0c;可以用以下方式求实数解&#xff1a; ∙∙ 计算 Δ−4ac&#xff0c;则: 1. 若 Δ&…

【功能介绍】在信创终端上查看系统的硬盘序列号以及USB设备的VID和PID _ 统信 _ 麒麟 _ 方德

往期好文&#xff1a;【系统配置】命令行修改统信UOS的grub启动延时 Hello&#xff0c;大家好啊&#xff01;今天给大家带来一篇关于如何在信创终端上查看系统的硬盘序列号以及USB设备的VID和PID的文章。在日常使用中&#xff0c;查看硬盘的序列号以及USB设备的VID&#xff08;…

电脑篇——Windows设置文件夹只读功能(高级篇)

使用背景&#xff1a; 某工厂产线上的Windows电脑里面有一些生产测试软件在指定的文件夹中&#xff08;下文中称为文件夹A&#xff09;。为了防止普通职工随意修改、删除、替换文件&#xff0c;对生产软件版本管控产生不可控因素&#xff0c;我们需要给文件夹A添加保护&#xf…

基于RabbitMQ,Redis,Redisson,RocketMQ四种技术实现订单延时关闭功能及其相关优缺点介绍(以12306为主题)

目录 1. 延迟关闭订单 1.1 订单延时关闭功能技术选型 1.1.1 定时任务 1.1.2 RabbitMQ 1.1.3 Redis 过期监听 1.1.4 Redisson 1.1.5 RocketMQ 1.2 RocketMQ订单延时关闭发送方实现 1.3 RocketMQ订单延时关闭的消费方实现 1. 延迟关闭订单 用户发起订单后&#xff0c;如…

2023 ICPC 亚洲澳门赛区赛 D. Graph of Maximum Degree 3

题目 题解 #include <bits/stdc.h> using namespace std; // #define int long long #define pb push_back #define fi first #define se second #define lson p << 1 #define rson p << 1 | 1 #define ll long long #define pii pair<int, int> #defi…