C语言-【移位操作符详解】

         这篇文章主要介绍了C语言中移位操作符,文章中通过详细的代码以及有关计算机中零碎的知识点对移位操作符进行了一个更好的解释,需要的小伙伴们可以一起学习学习吖~

移位操作符:移动的是补码的二进制序列。

在C语言当中,有两种移位操作符:

(1)左移操作符:<<

(2)右移操作符:>>

是不是符号很容易混淆啊,大家记住它们的时候就想着箭头的方向朝哪边,就是什么操作符。

在进入正题之前,先给大家普及一下关于整数在内存中存储的相关基础知识吧

大家要知道,在C语言中整型是四个字节,也就是32bite,在内存中就是一个32位的二进制数字。

那原码,反码,补码分别是什么呢,它们又是如何求的呢?

这三种二进制表示方法,都由符号位和数值位两部分组成,当是正数时,符号位为0;当是负数时,符号位为1;

原码:就是将一个整数转换成二进制的形式,通俗的讲,原码就是一个整数原有的不做任何改变的二进制形式。

反码:在原码的基础上,将原码的符号位不变,其他位按位取反,就可以得到反码。

补码:在反码的基础上,反码加1,就可以得到补码。

举个例子吧:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
	int m = 10;
	//00000000000000000000000000001010  
	//正数的原码,反码,补码是相同的;
	int m = -10;
	//10000000000000000000000000001010  -- 原码
	//11111111111111111111111111110101  -- 反码
	//11111111111111111111111111110110  -- 补码

	return 0;
}

在计算机内部,整数的存储采用的是以补码的方式进行存储,那么,当读取整数时,还需要采用逆向转换的思想,通俗的讲,就是要将补码转换成原码。

使用补码的原因:

        因为使用补码。可以将符号位和数值域统一处理,与此同时,加法和减法也可以统一处理,这里需要注意,CPU只有加法器,除此之外,在补码与原码相互转换的过程中,它的运算过程是相同的。在内存中存放的是补码,但打印出来,也就是我们所看到的可是原码吆。如果大家原码转化成补码已经很熟悉,那么也应该具有逆向思维,掌握补码如何转化为原码哦~

一. 左移操作符

移位规则:左边抛弃,右边补0;

举个例子最好说明了:

假如,我们定义一个整型变量n,给n赋初值为5,将n左移,即n<<1,那结果是什么呢?

     前面已经介绍了整型在内存中的存储方式,那么我们就知道整型5在内存中的存储方式是以补码的形式存在的,那么将5左移1位,也就是将5的二进制位向左移动1位,并且将移动的这一位抛弃右边补0,所得到的就是5<<1 位的结果了。

运行结果:

 

 二.右移操作符

右移运算分为两种:

(1)逻辑移位:左边用0填充,右边丢弃

(2)算数移位:左边用该原值的符号位填充,右边丢弃;

还是举例子吧,哈哈:

假如,我们定义一个整型变量n,给n赋初值为5,将n右移,即n>>1,那结果是什么呢?

 分情况讨论:

a:假如说右移是算数移位:

通俗的讲,就是将5在内存中存储的二进制位右移1位,把右边移动的这位抛弃,左边用该值存储的二进制位的符号位填充 ,所得到的结果就是5>>1位的结果了。

 运行结果:

 

b:假如说右移是逻辑移位:

通俗的讲,就是左边用0填充,右边丢弃,因为在内存中,当整数为正数时,其符号位是用0表示的,所以,对于正整数来说,两种移位方法所得到的结果都是相同的。

    那么,如果是对于负整数呢?接下来试试吧:

a:假如说右移是算数移位:

b:假如说右移是逻辑右移:

 咦,怎么出现不一样的结果了呢? 

这里就有个小注意:在C语言标准中,并没有明确定于对于有符号数应该使用哪种类型的右移,但是,实际上几乎所有的编译器/机器组合都对有符号数使用算术右移,不过,对于无符号数,右移必须是逻辑的。

 警告⚠:

对于移位运算符,不要移动负数位,这个是为标准定义的。

比如:

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

  好啦,关于C语言移位操作符就介绍到这里啦,如有不足之处,欢迎各位小伙伴们指点吖~

 

 

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

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

相关文章

「OceanBase 4.1 体验」|OCP Express

文章目录 一、简介二、特性介绍2.1 数据库管理2.2 数据库可观测性 一、简介 OCP Express 是一个基于 Web 的 OceanBase 4.x 轻量化管理工具&#xff0c;作为 OceanBase 数据库的工具组件&#xff0c;它集成在 OceanBase 数据库集群中&#xff0c;支持数据库集群关键性能指标查看…

一个月内面了30家公司,薪资从18K变成28K,真行啊····

工作3年&#xff0c;换了好几份工作&#xff08;行业流行性大&#xff09;&#xff0c;每次工作都是裸辞。朋友都觉得不可思议。因为我一直对自己很有信心&#xff0c;而且特别不喜欢请假面试&#xff0c;对自己负责也对公司负责。 但是这次没想到市场环境非常不好&#xff0c;…

一文搞懂Go错误链

0. Go错误处理简要回顾 Go是一种非常强调错误处理的编程语言。在Go中&#xff0c;错误被表示为实现了error接口的类型的值&#xff0c;error接口只有一个方法&#xff1a; type error interface {Error() string } 这个接口的引入使得Go程序可以以一致和符合惯用法的方式进行错…

【SpringCloud01】

SpringCloud01 1.认识微服务1.0.学习目标1.1.单体架构1.2.分布式架构1.3.微服务1.4.SpringCloud1.5.总结 2.服务拆分和远程调用2.1.服务拆分原则2.2.服务拆分示例2.2.1.导入Sql语句2.2.2.导入demo工程 2.3.实现远程调用案例2.3.1.案例需求&#xff1a;2.3.2.注册RestTemplate2.…

Java学习笔记 --- Stream流

一、体验Stream流【理解】 案例需求 按照下面的要求完成集合的创建和遍历 创建一个集合&#xff0c;存储多个字符串元素 把集合中所有以"张"开头的元素存储到一个新的集合 把"张"开头的集合中的长度为3的元素存储到一个新的集合 遍历上一步得到的集合 …

使用edge浏览器,白嫖ChatGPT的保姆级教程来了

前言 嗨&#xff0c;大家好&#xff0c;我是希留&#xff0c;一个被迫致力于全栈开发的老菜鸟。 人工智能大浪潮已经来临&#xff0c;对于ChatGPT&#xff0c;我觉得任何一个玩互联网的人&#xff0c;都应该重视起来&#xff0c;用起来。但是国内使用需要解决科学上网、注册、…

计算机基础--->数据结构(1)【图的存储和遍历】

文章目录 图图的存储图的搜索&#xff08;无向无权图&#xff09;代码演示 图 图中包含 顶点、边、度&#xff0c;无向图&#xff0c;有向图&#xff0c;无权图&#xff0c;带权图&#xff0c;其中 度表示一个顶点包含多少条边&#xff0c;有出度和入度。 图的存储 邻接矩阵 代…

(CVE-2022-22965)Spring Framework 远程命令执行漏洞(vulfocus复现)

漏洞原理 该漏洞是SpringFramework数据绑定的一个漏洞&#xff0c;如果后台方法中接受的参数为非基础类型&#xff0c;Spring会根据前端传入的请求正文中的参数的key值来查询与其名称所对应的getter和setter方法&#xff0c;攻击者利用这一特性修改了Tomcat的一个用于日志记录…

浅谈Android PMS解析APP信息流程

前言 前面我们了解了Zygote的启动流程&#xff0c;知道AMS、PMS都是由SystemServer进程启动的&#xff0c;我们都知道PMS主要负责App管理工作&#xff0c;这里我们简单从源码角度分析下PMS是如何解析APP解析的&#xff1b; 源码分析(API 30为例) 我们还是从PackageManagerSe…

英文论文润色哪家好用比较好,有值得推荐的吗

英文论文润色 推荐 英文论文润色对于写作者来说是一项十分重要的任务&#xff0c;它可以帮助我们修改文章中的语法、标点和排版等问题&#xff0c;使论文更加准确和易读。在众多的英文润色软件中&#xff0c;147chatgpt改写润色软件是一款值得推荐的全自动批量图文润色、自动纠…

财报解读:Q2业绩指引未达预期,狂奔的爱彼迎要减速了?

全球民宿龙头爱彼迎Airbnb迎来了一个强劲的开端。 美东时间5月9日盘后&#xff0c;爱彼迎发布了2023年第一季度财报。财报显示&#xff0c;爱彼迎一季度营收、净利润、总预订金额都获得了不同程度增长&#xff0c;超出市场预期。美中不足的是&#xff0c;公司预计二季度营收下…

对接银行处理退票的解决方案

什么是退票&#xff1f; 在跨行支付时&#xff0c;付款请求提交汇出行后&#xff0c;由汇出行转交至人民银行支付系统&#xff0c;经人民银行大小额系统处理后会先返回交易成功的结果&#xff0c;再由人民银行转至收款行&#xff0c;收款行在清算过程中会将收款人账户信息、状…

战略投资奥琦玮,微盟冲在餐饮复苏最前线

作者 | 辰纹 来源 | 洞见新研社 好起来了&#xff0c;一切都好起来了。 刚刚过去的五一假期&#xff0c;广州费大厨正佳广场店每天取号1000多桌&#xff0c;餐厅翻台率达到了1200%&#xff1b;长沙文和友单日最高排号超过1万&#xff0c;到店人数近6万&#xff1b;武汉主力龙…

【无标题】c++异常机制的一些总结以及思考

在谈及c处理异常机制的方法之前我们不妨来回顾一下c语言是如何应对这块的。 终止程序&#xff0c;如assert&#xff0c;缺陷&#xff1a;用户难以接受。如发生内存错误&#xff0c;除0错误时就会终止程序。 返回错误码&#xff0c;缺陷&#xff1a;需要程序员自己去查找对应的…

输入url后,到页面展示出来

目录 1、用户在浏览器中输入url地址 2、缓存解析 3、浏览器进行DNS解析域名得到服务器ip地址 4、TCP三次握手建立客户端和服务器的连接 5、客户端发送HTTP请求获取服务器端的静态资源 6、服务器发送HTTP响应报文给客户端&#xff0c;客户端获取到页面静态资源 7、TCP四次…

快速了解 TypeScript

目录 1、简介 2、安装TypeScript 3、编译代码 4、类型注解 5、接口 6、类 7、运行TypeScript Web应用 1、简介 TypeScript是JavaScript类型的超集&#xff0c;它可以编译成纯JavaScript。 TypeScript可以在任何浏览器、任何计算机和任何操作系统上运行&#xff0c;并且…

LeetCode_Day2 | 有意思的数组滑动窗口及螺旋矩阵

LeetCode_数组 977.有序数组的平方1.题目描述2.暴力法3. 双指针法 209.长度最小的子数组1.题目描述2.暴力法3.滑动窗口(双指针法) 59.螺旋矩阵1.题目描述2. 螺旋矩阵解法 977.有序数组的平方 1.题目描述 给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返回 每个数字…

推荐6个我经常逛的“小网站”,嘿嘿嘿!!!

如今&#xff0c;全球互联网上已经有超过 17 亿个网站。除了全球那些主流网站被大家所熟知外&#xff0c;其实还有很多很多网站&#xff0c;被淹没在了互联网世界中。 每次发现优质的内容都会第一时间给大家分享出来&#xff0c;不管是软件&#xff0c;插件&#xff0c;脚本还…

为什么要做计划跟踪:没有计划,就没有控制

日常工作中&#xff0c;我们每天都被大量的信息和任务填满&#xff0c;常常由于任务繁冗复杂&#xff0c;让人陷入一种无所适从的状态。 我们经常会看到很多如何安排工作计划的教程&#xff0c;比如&#xff1a; 要把大的项目分解为小目标&#xff0c;小目目标再分解为日常任务…

【iOS】—— 实现WebSocket发送消息(SocketRocket第三方库的使用和解析)

文章目录 WebSocketWebSocket特点 SocketRocket导入头文件设置代理SRWebSocket的初始化和建立连接SRWebSocketDelegate 代理方法实现加上简单UI实现两个用户之间简单通信浅看了一点点源码&#xff08;理解的不深&#xff09; 偶然之间了解到了利用WebSocket实现后端和前端的相互…