操作符详解(上)(新手向)

news2024/11/11 12:27:16

操作符详解(上)

  • 一,算术操作符(双目操作符)
    • 1:‘+’,‘-’,‘*’
    • 2:‘/’,‘%’
  • 一,单目操作符
    • 1:‘+’,‘-’
    • 2:‘!’
    • 3:‘&’
    • 4:‘*’
    • 5:‘sizeof’
    • 6:‘++’与‘--’
  • 三,移位操作符
    • 3.1 <<(左移操作符)
    • 3.2 <<(左移操作符)
    • 3.2 >>(右移操作符)
  • 四.位操作符
    • 4.1‘&’按位与
    • 4.2‘|’按位或
    • 4.3‘^’按位异或
    • 4.4‘~’按位取反

我们了解在C语言中有许多的操作符,这里我们详细介绍部分操作符

一,算术操作符(双目操作符)

1:‘+’,‘-’,‘*’

这三种算数操作符就相当于数学运算中的加法,减法,和乘法,是对两个数进行数学运算,

int a=1;
int b=2;
\\加法
int c=a+b;(结果为3)
\\减法
int c=b-a;(结果为1)
\\乘法
int c=a*b;(结果为2)

2:‘/’,‘%’

==‘/’==进行的操作相当于数学运算中的除法,但有些许不同,分为两种情况
第一种:当该操作符两端都为整形,结果也为整形,该操作符是将两数相除取商,例如5/3应该是商1余2,但结果只会显示商1
在这里插入图片描述
第二种:若想要输出的结果为小数,那么就需要除号两边之一为浮点数,并且输出的结果也要为浮点数,
在这里插入图片描述
‘%’ 进行的操作为将%号两边的数相除取余,例如5/3应该是商1余2,但结果只会显示余数2,
在这里插入图片描述
因为上述操作符运算所需变量为两个,也就是运算对象的个数是2,所以又被称作双目操作符。

一,单目操作符

1:‘+’,‘-’

这里的‘+’,‘-’并不是算数中的加号与减号,而是表示正数与负数,通常来说负数前会有‘-’号,而正数前的‘+’号通常省略。

2:‘!’

'!'为逻辑反操作符,用于对布尔值进行反转,举个例子:条件判断中,一般条件成立即为真,布尔值为非0,加上!后非0为假,0为真,也就是条件成立为假,不成立为真,我们设计一个简单的代码来看一下具体效果:

#include<stdio.h>
int main()
{
	int a = 0;
	while (scanf("%d", &a) != EOF)
	{
		if (a > 0)
		{
			printf("%d\n", a);
		}
		else
		{
			printf("NO\n");
		}
	}
	
	return 0;
}

在这里插入图片描述
这是没有加‘!’操作符时的结果,

#include<stdio.h>
int main()
{
	int a = 0;
	while (scanf("%d", &a) != EOF)
	{
		if(!(a > 0))
		{
			printf("%d\n", a);
		}
		else
		{
			printf("NO\n");
		}
	}
	
	return 0;
}

在这里插入图片描述
这是加上!操作符后的结果。

3:‘&’

用于获取变量的内存地址。

4:‘*’

间接引用和解引用操作符,获取指针所指向的值。

5:‘sizeof’

用于获取数据类型或对象在内存中的大小(以字节为单位)
在这里插入图片描述

6:‘++’与‘–’

自增‘++’与自减‘–’,作用分别为将操作数的值增加1和减少1。
在实际操作中又分为前置和后置两种情况,
‘++’和‘–’前置为操作数先变化后使用,后置为操作数先使用后变化,如下图所示:

#include<stdio.h>
int main()
{
	int a = 1;
	int b = 1;
	int c = 1;
	int d = 1;
	printf("%d\n",++a);
	printf("a=%d\n",a);
	printf("%d\n",b++);
	printf("b=%d\n",b++);
	printf("%d\n",--c);
	printf("c=%d\n",--c);
	printf("%d\n",d--);
	printf("d=%d\n",d--);
	return 0;
}

其输出结果为:
在这里插入图片描述

这里可以看到前置和后置操作符最终输出的结果并不相同。
介绍完C语言中比较简单的两种操作符,我们再来介绍一下比较复杂的操作符,位操作符

三,移位操作符

在介绍移位操作符前,还得先介绍十进制数字在计算机中的存储方式以及源码,反码,补码。

十进制数在计算机中通常不是直接储存的,而是先转化位二进制数在进行存储。而为了区分正负数,计算机对有符号整数采用了不同的编码储存方式,也就是源码反码补码

在现代的计算机中主要采用的数字集成电路完成,数字电路通过高低电平只能表示0和1,所以就出现了,计算机只会识别0和1。无论是存储还是计算,计算机均采用二进制体系完成。
在C语言中不同数据类型的大小不一样,如int类型每个占4个字节,而每个字节又等于8个比特位。
sizeof(int)=1byte=8bit每个比特位存储的便是0或1。
一个int类型共有32个比特位,每个比特位只能是0或1,也就是说在计算机中整型是采用二进制的方式存储的,那么int的取值范围便是-231~231-1
了解了上面的基本概念后,我们就来详细了解一下源码,反码和补码,
注意,源码,反码和补码只能应用在整数中
而正整数和负整数的存储是不一样的,我们分开讨论:
正整数:正整数的源码=反码=补码
负整数:负整数在计算机中是以补码的形式进行储存的,那么该如何得到负整数的补码?
首先,我们要了解计算机区分正,负整数的原理,在计算机中为了区分正负整数,在整形的32位比特位中,正整数的最高位比特位为0,而负整数的最高位为1,将负整数的源码除了最高位的符号位按位取反得到负整数的反码,反码加1得到负整数的补码。
下面以x64环境下的整型存储为例:

int a=5;
a的源码=反码=补码为:0000 0000 0000 0000 0000 0000 0000 0101
int b=-5;
b的源码为:1000 0000 0000 0000 0000 0000 0000 0101
   反码为:1111 1111 1111 1111 1111 1111 1111 1010
   补码为:1111 1111 1111 1111 1111 1111 1111 1011

而计算机之所以会有三种储存整形的方式的原因都是因为计算的难易,
源码的一个缺点是存在两种不同的表示方式来表示0(0000 和 1000),这可能导致一些不必要的复杂性。
反码的一个优点是消除了0的两种表示,但缺点是进行加减运算时相对复杂。
补码是最常用的表示法,特别是在现代计算机中。补码的一个主要优点是它使得加法运算更加简单,因为对于任何整数x,都有 x + (-x) = 0,这在补码表示下总是成立。另一个优点是只有一个0的表示(0000),这使得处理更加简单。
下面就介绍2种移位操作符:
>>(右移操作符)和<<(左移操作符)
注意:移位操作符的操作数只能是整数

3.1 <<(左移操作符)

3.2 <<(左移操作符)

移位规则:将整数的补码整体向左移动一位,左边的抛弃,右边空的补0;
演示:

#include<stdio.h>
int main() 
{
	int num = 1;
	num = num << 1;
	printf("%d\n", num );
	return 0;
}

输出结果:
在这里插入图片描述

移位图解:
在这里插入图片描述

3.2 >>(右移操作符)

右移操作符相对左移来说较为复杂,分为逻辑右移和算术右移
逻辑右移:左边⽤0填充,右边丢弃
逻辑右移一位图解:
在这里插入图片描述

算术右移:左边⽤原该值的符号位填充,右边丢弃
图解:
在这里插入图片描述
注意对于移位运算符,不要移动负数位,这个是标准未定义的

四.位操作符

注意:位操作符的操作数必须是整数

4.1‘&’按位与

该操作符在二进制层面上对两个数进行操作,它比较两个数的相应位,只有当两个相应的位都为1时,结果位才为1,否则为0;
代码和图解演示:

#include<stdio.h>
int main() 
{
	int num1 = 6;
	int num2 = 13;
	int num3 = num1 & num2;
	printf("%d\n", num3 );
	return 0;
}

在这里插入图片描述
在这里插入图片描述
图解:(前面为0的位省略)
在这里插入图片描述

4.2‘|’按位或

该操作符在二进制层面上对两个数进行操作,它比较两个数的相应位,只要两个数中任意一个数的相应位为1,那么结果位就为1,否则为0;
代码和图解演示:

#include<stdio.h>
int main() 
{
	int num1 = 2;
	int num2 = 13;
	int num3 = num1 | num2;
	printf("%d\n", num3 );
	return 0;
}

在这里插入图片描述

图解:(前面为0的位省略)
在这里插入图片描述

4.3‘^’按位异或

该操作符在二进制层面上对两个数进行操作,它比较两个数的相应位,当两个数的相应位不同时,结果位为1;当两个数的相应位相同时,结果位为0。
代码和图解演示:

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

在这里插入图片描述

图解:(前面为0的位省略)
在这里插入图片描述

4.4‘~’按位取反

该操作符用于对二进制数的每一位执行逻辑非操作。具体地说,它将二进制数中的每个0变为1,每个1变为0。
代码和图解演示:

#include<stdio.h>
int main() 
{
	int num1 = 2;
	num1 = ~num1;
	printf("%d\n", num1 );
	return 0;
}

在这里插入图片描述

图解:(前面为0的位省略)
在这里插入图片描述

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

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

相关文章

c++(一)

c&#xff08;一&#xff09; C与C有什么区别命名空间使用 输入输出流引用指针和引用的区别定义拓展 函数重载例子测试函数重载原理 参数默认值什么是参数默认值注意 在c中如何引入c的库动态内存分配new、delete与malloc、free的区别&#xff1f; C与C有什么区别 <1>都是…

.NET 一款内部最新的免杀WebShell

01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等&#xff08;包括但不限于&#xff09;进行检测或维护参考&#xff0c;未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&#xf…

释放Mac潜能,选择Magic Disk Cleaner for Mac

想要让Mac运行更加流畅、性能更加出色吗&#xff1f;那就选择Magic Disk Cleaner for Mac吧&#xff01; Magic Disk Cleaner for Mac v2.7.7激活版下载 这款软件是Mac用户的得力助手&#xff0c;它拥有强大的扫描和清理功能&#xff0c;能够迅速找出并删除硬盘上的无用文件和垃…

亲测使用frp获得访问者真实ip

怎么访问都只有127.0.0.1这个内网ip,获取不到访问者的真实ip 1.打开frp的配置文件(一般是frpc.toml&#xff0c;无需设置frps.toml) 在每一个tcp协议中添加 transport.proxyProtocolVersion "v2" 实例&#xff1a; # frpc.toml [[proxies]] name "web" …

Docker+nginx部署SpringBoot+vue前后端分离项目(保姆及入门指南)

前后分离项目部署 项目回顾工具上线准备1、win1.1、前端1.2、后端 2、linux环境2.1、安装docker2.2、安装docker compose2.3、编写Dockerfile文件2.4、编写docker-compose.yml文件2.5、修改application-pro.yml2.6、准备好nginx的挂载目录和配置2.7、部署后端服务 项目回顾 书…

Studio 3T 2024.3 (macOS, Linux, Windows) - MongoDB 的专业 GUI、IDE 和 客户端,支持自然语言查询

Studio 3T 2024.3 (macOS, Linux, Windows) - MongoDB 的专业 GUI、IDE 和 客户端&#xff0c;支持自然语言查询 The professional GUI, IDE and client for MongoDB 请访问原文链接&#xff1a;https://sysin.org/blog/studio-3t/&#xff0c;查看最新版。原创作品&#xff…

从0开始带你成为Kafka消息中间件高手---第三讲

从0开始带你成为Kafka消息中间件高手—第三讲 实际上来说&#xff0c;每次leader接收到一条消息&#xff0c;都会更新自己的LEO&#xff0c;也就是log end offset&#xff0c;把最后一位offset 1&#xff0c;这个大家都能理解吧&#xff1f;接着各个follower会从leader请求同…

LabviewCarla仿真平台搭建一:平台设计及仿真视频可视化实现

文章目录 背景一、平台设计二、视频显示模块实现1、视频模块实现框架2、python-camera数据生成3、labview-camera数据可视化 三、效果展示 背景 在使用carla的时候&#xff0c;有平台的话可以提高效率&#xff0c;因此想结合labview和carla设计一个仿真平台-labcar。其实carla…

滑动菜单栏

效果如下&#xff1a; NavigationView 新建menu布局,表示菜单栏的选项 <menu xmlns:android"http://schemas.android.com/apk/res/android"> <group android:checkableBehavior"single"> <item android:id"id/navCall" android…

C#【进阶】特殊语法

特殊语法、值和引用类型 特殊语法 文章目录 特殊语法1、var隐式类型2、设置对象初始值3、设置集合初始值4、匿名类型5、可空类型6、空合并操作符7、内插字符串8、单句逻辑简略写法 值和引用类型1、判断值和引用类型2、语句块3、变量的生命周期4、结构体中的值和引用5、类中的值…

对于高速信号完整性,一块聊聊啊(12)

常见的无源电子器件 电子系统中的无源器件可以按照所担当的电路功能分为电路类器件、连接类器件。 A、电路类器件&#xff1a; &#xff08;1&#xff09;二极管&#xff08;diode&#xff09; &#xff08;2&#xff09;电阻器&#xff08;resistor&#xff09; &#xf…

智慧城市运维可视化:透视未来城市高效管理的新视窗

行业痛点 现代城市运维是一个复杂而庞大的系统&#xff0c;涉及到诸多方面&#xff0c;包括交通、环境、能源等等。然而&#xff0c;在城市运维中&#xff0c;存在着一些现实的痛点&#xff0c;给城市管理者带来了不小的压力和困扰&#xff1a; 1、交通拥堵 随着城市化进程的…

基于Docker的ElasticSearch、Kibana服务搭建并开启用户鉴权

&#x1f3f7;️个人主页&#xff1a;牵着猫散步的鼠鼠 &#x1f3f7;️系列专栏&#xff1a;云原生与服务部署专栏 &#x1f3f7;️个人学习笔记&#xff0c;若有缺误&#xff0c;欢迎评论区指正 目录 1. 前言 2. 服务搭建 2.1. 部署ElasticSearch 2.2. 部署Kibana 3. …

深入理解指针(5)

在之前的深入理解指针(4)中我们学习了回调函数相关知识&#xff0c;并且学会了如何使用库函数qsort&#xff0c;以及模拟实现了qsort&#xff0c;接下来在本篇中将对srtlen和sizeof进行细致的讲解&#xff0c;并对相关的题型进行讲解&#xff0c;一起加油吧&#xff01;&#x…

【408精华知识】指令的寻址方式

文章目录 一、指令寻址&#xff08;一&#xff09;顺序寻址&#xff08;二&#xff09;跳跃寻址 二、数据寻址&#xff08;一&#xff09;隐含寻址&#xff08;二&#xff09;立即&#xff08;数&#xff09;寻址&#xff08;三&#xff09;直接寻址&#xff08;四&#xff09;…

网络域名是什么意思

网络域名&#xff0c;顾名思义&#xff0c;就是网络上的名字&#xff0c;类似于现实中的地址或姓名一样&#xff0c;用来标识网络上的一个或一组计算机或服务器的位置&#xff0c;以及它们的相应服务资源。网络域名是互联网上最基础的基础设施之一&#xff0c;是网络通信的“标…

虚机配置USB CDROM设备热迁移crash

虚机配置USB CDROM设备热迁移crash 问题现象定位过程堆栈分析日志分析打开trace异常日志上下文分析SpecificationCBWCSW 命令执行发送读命令读取数据 正常日志异常堆栈 修复方案结论 基础原理设备模型数据结构设备实例化 UHCIFrame ListTDQH SCSI 问题现象 dogfood环境一台虚机…

Echarts图表使用

ECharts是一个用JS实现开源可视化库&#xff0c;它提供了丰富的图表类型和交互能力。使用户可以通过简单的配置生成各种各样的图表。 先安装ECharts图表直接下载echarts.min.js并用<script>标签引入也可以使用源代码版本echarts.js并用<script>标签引入&#xff0…

【vue3+elementuiplus】el-select下拉框会自动触发校验规则

场景&#xff1a;编辑弹框省份字段下拉框必填&#xff0c;触发方式change&#xff0c;有值第一次打开不会触发校验提示&#xff0c;关闭弹框再次打开触发必填校验提示&#xff0c;但是该字段有值 问题的原因是&#xff1a;在关闭弹层事件中&#xff0c;我做了resetfileds&…

【kubernetes】陈述式资源管理的kubectl命令合集

目录 前言 一、K8s 资源管理操作方式 1、声明式资源管理方式 2、陈述式资源管理方式 二、陈述式资源管理方式 1、kubectl 命令基本语法 2、查看基本信息 2.1 查看版本信息 2.2 查看资源对象简写 2.3 配置kubectl命令自动补全 2.4 查看node节点日志 2.5 查看集群信息…