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

操作符详解(上)

  • 一,算术操作符(双目操作符)
    • 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的位省略)
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

02:PostgreSQL用户和权限

环境&#xff1a; 操作系统&#xff1a;CentOS 7.9 64bitPostgreSQL 版本&#xff1a;16.x 或 15.x安装用户&#xff1a;postgres软件安装目标路径&#xff1a;/usr/pgsql-<version>数据库数据目录&#xff1a;/pgdata 目录 用户和角色 创建用户或角色 权限管理 查看权…

初识Spring Boot

初识Spring Boot SpringBoot是建立在Spring框架之上的一个项目,它的目标是简化Spring应用程序的初始搭建以及开发过程。 对比Spring Spring Boot作为Spring框架的一个模块&#xff0c;旨在简化Spring应用程序的初始搭建和开发过程&#xff0c;以下是Spring Boot相对于传统Spri…

【前端笔记】Vue项目报错Error: Cannot find module ‘webpack/lib/RuleSet‘

网上搜了下发现原因不止一种&#xff0c;这里仅记录本人遇到的原因和解决办法&#xff0c;仅供参考 原因&#xff1a;因为某种原因导致本地package.json中vue/cli与全局vue/cli版本不同导致冲突。再次提示&#xff0c;这是本人遇到的&#xff0c;可能和大家有所不同&#xff0c…

【Elasticsearch】Centos7安装Elasticsearch、kibana、IK分词

目录 本文安装包下载地址注意安装elasticsearch1.上传文件2.解压elasticsearch-6.3.1.tar.gz3.开启远程连接权限4.修改其他配置[root用户操作]5.重启虚拟机6.启动es7.外部访问 安装kibana-61.解压2.配置3.启动kibana4.访问5.在开发工具中做数据的增删改查操作 安装IK分词1.wind…

BUUCTF---web---[BJDCTF2020]ZJCTF,不过如此

1、点开连接&#xff0c;页面出现了提示 传入一个参数text&#xff0c;里面的内容要包括I have a dream。 构造&#xff1a;?/textI have a dream。发现页面没有显示。这里推测可能得使用伪协议 在文件包含那一行&#xff0c;我们看到了next.php的提示&#xff0c;我们尝试读取…

cs与msf权限传递,以及mimikatz抓取win2012明文密码

目录 解释参数 foreign http foreign https cs与msf权限传递 Cobalt Strike会话传递到Metasploit Framework Cobalt strike上的操作 ​编辑​编辑​编辑 Metasploit Framework上的操作 传递会话 Metasploit Framework会话传递到Cobalt Strike Cobalt strike上的操作…

rk3568_atomic

文章目录 前言一、atomic是什么?二、原子操作API函数1.atomic原子操作2.原子位操作API三、atomic驱动实验总结前言 本文记录的是正点原子rk3568开发板的atomic实验 一、atomic是什么? 不同的线程在进行读写的过程中,可能会冲突乱入,导致会有预想不到的结果。所以为了让数…

如何进行异地多地兼容组网设置?

跨地区工作、远程办公和异地合作已成为常态。由于网络限制和安全性要求&#xff0c;远程连接仍然是一个具有挑战性的问题。为了解决这一难题&#xff0c;各行各业都在寻找一种能在异地多地兼容的组网设置方案。本文将着重介绍基于【天联】的组网解决方案&#xff0c;探讨其操作…

Unity | 框架MVC

目录 一、MVC介绍 二、搭建UI界面 三、代码实现 1.Model层 2.View层 3.Controller层 四、MVC框架测试 五、知识补充 一、MVC介绍 model&#xff1a;数据层。界面展示的数据&#xff08;需要进行初始化、更新、保存、事件通知等操作&#xff09;&#xff0c;单例模式&am…

flutter 实现旋转星球

先看效果 planet_widget.dart import dart:math; import package:flutter/material.dart; import package:vector_math/vector_math_64.dart show Vector3; import package:flutter/gestures.dart; import package:flutter/physics.dart;class PlanetWidget extends StatefulW…

内网穿透--Spp-特殊协议-上线

免责声明:本文仅做技术交流与学习... 目录 spp项目: 一图通解: 1-下载spp 2-服务端执行命令 3-客户端执行命令 4-服务端cs监听&生马 spp项目: GitHub - esrrhs/spp: A simple and powerful proxy 支持的协议&#xff1a;tcp、udp、udp、icmp、http、kcp、quic 支持的…

什么是健康信息卡

健康档案信息卡是交由居民本人保管的个人健康信息卡片。 其内容包括&#xff1a;居民个人主要基本信息、健康档案编码、患有的重要疾病、过敏史以及紧急情况下的联系人及联系方式&#xff0c;还有所属基层医疗机构的责任医生、护士及联系电话等。它主要用于居民在复诊、转诊或接…

HTML+CSS 玻璃按钮

效果演示 Code <!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>玻璃按钮</title><li…

Distributed Transactions Mit 6.824

Topic1&#xff1a;distributed transactions concurrency control atomic commit 传统计划&#xff1a;事务 程序员标记代码序列的开始/结束作为事务。 事务示例 x 和 y 是银行余额——数据库表中的记录。x 和 y 位于不同的服务器上&#xff08;可能在不同的银行&#x…

【Linux网络】端口及UDP协议

文章目录 1.再看四层2.端口号2.1引入linux端口号和进程pid的区别端口号是如何生成的传输层有了pid还设置端口号端口号划分 2.2问题2.3netstat 3.UDP协议3.0每学一个协议 都要讨论一下问题3.1UDP协议3.2谈udp/tcp实际上是在讨论什么&#xff1f; 1.再看四层 2.端口号 端口号(Po…

Servlet 的 API

HttpServlet init&#xff1a;当 tomcat 收到了 /hello 这样的路径是请求后就会调用 HelloServlet&#xff0c;于是就需要对 HelloServlet 进行实例化&#xff08;只实例一次&#xff0c;后续再有请求也不实例了&#xff09;。 destory&#xff1a;如果是通过 smart tomcat 的停…

存在重复元素 II[简单]

优质博文&#xff1a;IT-BLOG-CN 一、题目 给你一个整数数组nums和一个整数k&#xff0c;判断数组中是否存在两个不同的索引i和j&#xff0c;满足nums[i] nums[j]且abs(i - j) < k。如果存在&#xff0c;返回true&#xff1b;否则&#xff0c;返回false。 示例 1&#…

Netty初识Hello World 事件循环对象(EventLoop) 事件循环组 (EventLoopGroup)

初始Netty-HelloWorld Netty在网络通信中的地位就如同Spring框架在JavaEE开发中的地位。 基于Netty网络通信开发简易的服务端、客户端&#xff0c;以实现客户端向服务端发送hello world&#xff0c;服务端仅接收不返回数据。 服务端代码&#xff1a; Slf4j public class Hell…

ICML2024 定义新隐私保护升级:DP-BITFIT新型微调技术让AI模型学习更安全

DeepVisionary 每日深度学习前沿科技推送&顶会论文分享&#xff0c;与你一起了解前沿深度学习信息&#xff01; 引言&#xff1a;差分隐私在大模型微调中的重要性和挑战 在当今的深度学习领域&#xff0c;大型预训练模型的微调已成为提高各种任务性能的关键技术。然而&am…

开放式耳机哪个品牌音质好用又实惠耐用?五大公认卷王神器直入!

​在现今耳机市场&#xff0c;开放式耳机凭借其舒适的佩戴体验和独特的不入耳设计&#xff0c;备受消费者追捧。它们不仅让你在享受音乐时&#xff0c;仍能察觉周围的声音&#xff0c;确保与人交流无障碍&#xff0c;而且有利于耳朵的卫生与健康。对于运动爱好者和耳机发烧友而…