移位操作符

news2024/9/20 14:23:27

目录

移位

>> --- 右移操作符

右移操作符代码的使用

 代码验证

 算术右移和逻辑右移 

验证Visual Studio使用的是算术右移还是逻辑右移

逻辑右移 or 算术右移的代码验证

右移操作符对正整数有除2的效果(除2是整数除法的除2)

验证

<< --- 左移操作符

 左移操作符移动规则

左移操作符代码的使用

代码验证


移位

  1. 移动的是数据存储在内存中的二进制位,移动的也就是数据的补码
  2. 关于数据补码的相关知识请见:整数的二进制表示形式:原码、反码、补码-CSDN博客
  3. 注意:移位操作符的操作数只能是整数

>> --- 右移操作符

右移操作符代码的使用

int a = 15;

int b = a >> 1;

a >> 1:可理解为a存储在内存中的二进制补码向右移动一个bit位

且a为正整数,所以a的原码、反码、补码是相同的

a向右移一个bit位后,最低位的1就要被舍去,最高位的符号位要补全,补全有两种补全方式,算术右移和逻辑右移,下方会解释


 代码验证

由以上的图画可得知,a向右移一位后赋值给变量b

那么b的值应该为7,因为1*2^0 + 1*2^1 + 1*2^2 = 7

 变量a的值没有改变,由此可得出结论:位移操作符不会改变操作数的值


 算术右移和逻辑右移 

  1. 算术右移:右边丢弃,左边补原来的符号位
  2. 逻辑右移:右边丢弃,左边直接补0
  3. C语言没有给出明确的规定,一般编译器上采用的是算术右移
  4. 注意:丢弃的、操作的、右移的都是数据的补码

 

验证Visual Studio使用的是算术右移还是逻辑右移

int a = -15;
int b = a >> 1;
printf("b = %d\n", b);

 

 (-15)存储在变量a中的补码:

 

当Visual Studio为算数右移后(a >> 1)的结果:

原码最高位是符号位,最高位为1,表示的是负整数,且1*2^3 = 8

 所以(a >> 1)后的算术右移结果为:-8

当Visual Studio为逻辑右移后(a >> 1)的结果:

最高位将会直接补0,那么(a >> 1)后的逻辑右移结果为:8

逻辑右移 or 算术右移的代码验证

由此可见Visual Studio使用的是算术右移 


右移操作符对正整数有除2的效果(除2是整数除法的除2)

关于整数除法的相关知识请见:算数操作符(除法操作符和取模操作符)-CSDN博客

验证

int a = 15;

int b = a >> 1;

int c = b >> 1;


<< --- 左移操作符

 左移操作符移动规则

左边丢弃,右边直接补0(注意:操作的、丢弃的、左移的都是数据的补码)

左移操作符代码的使用

int a = 6;

int b = a << 1;

a的补码以及(a<<1)后的补码:

代码验证

  1. 变量a的值没有被改变,由此得出结论:左移操作符不会改变操作数的值 
  2. 左移操作符对整数有乘2的效果 

写die我了差点,创作不易,麻烦各位大佬点个关注和赞赞(必回关),蟹蟹

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

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

相关文章

Day3:203 移除链表元素 707设计链表 206反转链表

题目&#xff1a;206. 反转链表 - 力扣&#xff08;LeetCode&#xff09; /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* …

[数据集][目标检测]棉花检测数据集VOC+YOLO格式389张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;389 标注数量(xml文件个数)&#xff1a;389 标注数量(txt文件个数)&#xff1a;389 标注类别…

Excel如果将一个表格拆分为多个表格,文末另赠彩蛋!

前期分享如何用数据透视表将一个表格拆分成多个工作薄Excel一个表格拆分多个表格&#xff0c;你学会了吗&#xff1f; 今天刘小生分享另外一种&#xff0c;如果拆分成多个工作表格文件&#xff01; 如何将一个表格根据部门进行拆分成多个表格&#xff0c;再点对点发送给各部门…

浅析Vite本地构建原理

前言 随着Vue3的逐渐普及以及Vite的逐渐成熟&#xff0c;我们有必要来了解一下关于vite的本地构建原理。 对于webpack打包的核心流程是通过分析JS文件中引用关系&#xff0c;通过递归得到整个项目的依赖关系&#xff0c;并且对于非JS类型的资源&#xff0c;通过调用对应的loade…

宝宝早教电子图书 酷得电子方案

宝宝早教发声书是一种专为婴幼儿设计的图书&#xff0c;旨在通过有趣的图画和声音来吸引宝宝的注意力&#xff0c;帮助他们学习语言、认知和发展各种技能。这类书籍通常包括以下特点&#xff1a; 鲜艳的图画&#xff1a;发声书通常配有色彩鲜艳、形象生动的图画&#xff0c;以…

什么美业系统好用?美业门店收银系统源码分享、小程序展示

专业美业系统与普通系统相比&#xff0c;更加贴合美业门店的经营需求&#xff0c;提供了更全面、便捷、高效的管理功能&#xff0c;有助于提升门店的服务质量和经营效益。 博弈美业系统包括PC、iPad、手机、小程序四大端口&#xff0c;满足不同人群的各种需求。客户可从小程序…

使用Leaflet和瓦片地图实现离线地图的技术指南

引言 在现代的Web应用中&#xff0c;地图服务扮演着越来越重要的角色。然而&#xff0c;在一些特殊环境下&#xff0c;如偏远地区或网络环境不稳定的情况下&#xff0c;依赖在线地图服务可能会受到限制。因此&#xff0c;实现离线地图功能成为了一个重要的需求。本文将介绍如何…

Jenkins定时构建自动化(四):Python 的 argparse 模块

目录 一、主要功能和用途 二、核心类和方法 三、总结 四、argparse模块示例 Jenkins定时构建自动化(一)&#xff1a;Jenkins下载安装配置-CSDN博客 Jenkins定时构建自动化(二)&#xff1a;Jenkins的定时构建-CSDN博客 Jenkins定时构建自动化(三)&#xff1a;手动定时构建…

【服务器08】之【游戏框架】之【加载主角】

首先简单了解一下帧率 FixedUpdate( ) > Update( ) > LateUpdate( ) 首先FixedUpdate的设置值 默认一秒运行50次 虽然默认是0.02秒&#xff0c;但FiexedUpdate并不是真的0.02秒调用一次&#xff0c;因为在脚本的生命周期内&#xff0c;FixedUpdate有一个小循环&…

嵌入式开发板屏幕显示汉字

一、实验目的 1&#xff0e;编写能够在嵌入式开发板LCD上显示汉字的程序&#xff1b; 2&#xff0e;在Ubuntu系统中编译上述程序生成可执行文件&#xff1b; 3&#xff0e;到开发板中验证。 二、实验步骤 1. Ubuntu系统上编写验证程序 Ubuntu系统上编写的验证程序如下&…

【亲测好用】神级PSAI插件大揭秘:三款创成式修图神器,让你解放双手

PsBeta被停用后&#xff0c;小编一直想找到能够平替PsBeta创成式填充功能的插件。 功夫不负有心&#xff0c;终于被我找到啦&#xff0c;现在就给大家揭秘这三款宝藏修图神器&#xff0c;希望能够帮到大家。 1.插件名称&#xff1a;Starai 无需科学上网&#xff0c;还自带提示…

文库小程序搭建部署:实现资源共享正向反馈

文档库相信大家应该不陌生&#xff0c;日常我们的工作模板、会议模板、求职时的简历模板、教育界的教学模板等来源方式都出自于文档库&#xff0c;随着互联网的发展和工作需求&#xff0c;文档模板开启了新型的知识变现新途径&#xff0c;通过文库小程序&#xff0c;我们不仅能…

RS-485和RS-422通信的3.3V低功耗收发器MAX3483

描述 多数公司的MAX3483速率为&#xff1a;250kbps&#xff1b; Analog Devices公司的MAX3483速率为10Mbps。 国产MAX3485外观和丝印 该MAX3483ESA为15kV ESD保护、3.3V、低功耗收发器&#xff0c;用于RS-485和RS-422通信。 每个设备包含一个驱动器和一个接收器。 该MAX3483E…

0624_ARM1

思维导图&#xff1a;

10分钟安装好torch的GPU版本(Windows)

pytorch-gpu 1. 确定cuda版本2. 确定Python版本3 开始下载-cu118-cp383.1 下载cuda3.2 下载torchvision 4.下载好了5.开始安装6. 开始验证 1. 确定cuda版本 nvcc -V 版本为11.8 , 一会下载的版本为cu118 2. 确定Python版本 确定python版本为为3.8&#xff0c;一会下载为cp38 3 …

Web自动化介绍以及8种元素定位方式

自动化理论 回归测试&#xff1a; 在进行软件升级、修改或修复bug后&#xff0c;对系统进行回归测试&#xff0c;以确保修改过的部分没有引入新的问题或破坏其他功能。回归测试通常是自动化执行的&#xff0c;并且可以通过比较测试前后的结果来确定系统的稳定性。 压力测试&am…

Android Studio 编译无错误 运行无结果一例

好长时间没写Android 代码了&#xff0c;基本规则也忘了。终于在编译成功了&#xff0c;然而运行毫无结果&#xff0c;debug跟踪断点也没有触发。屏幕赫然写着&#xff0c;execute successfully! 。 进行了各种检查&#xff0c;毫无进展。最后&#xff0c;试着重启一下AS&#…

APP启动流程

文章目录 主要构成详细启动流程参考链接 主要构成 App的启动流程主要涉及几个关键步骤和组件的交互&#xff0c;包括Launcher进程、ActivityManagerService&#xff08;AMS&#xff09;、Zygote进程、以及App进程本身。以下是详细的启动流程&#xff1a; 用户操作&#xff1a;…

【代码随想录】【算法训练营】【第49天】 [300]最长递增子序列 [674]最长连续递增序列 [718]最长重复子数组

前言 思路及算法思维&#xff0c;指路 代码随想录。 题目来自 LeetCode。 day 49&#xff0c;周二&#xff0c;坚持不了一点~ 题目详情 [300] 最长递增子序列 题目描述 300 最长递增子序列 解题思路 前提&#xff1a; 思路&#xff1a; 重点&#xff1a; 代码实现 C…

基于Pytorch框架构建LeNet-5模型

Pytorch 一、训练模型1.导入必要的库2.设置超参数3.数据预处理4.读取数据 二、定义卷积神经网络1.定义卷积神经网络2.定义学习率3.实例化模型并且移动到GPU4.选择优化器 三、定义调整学习率的函数1.定义调整学习率的函数 四、训练模型1.设置模型为训练模式2.遍历训练数据加载器…