二进制中左移、右移、无符号右移规则

前提知识

  • 正数的原码,反码以及补码都是一样的
  • 负数的反码是原码的符号位不变,数值位按位取反
  • 负数的补码是符号位不变,数值位在反码的基础上加1
  • 正数的符号位是用0来表示,负数的符号位使用1来表示

二进制左移(<<)

左移的话就比较简单了,因为他不牵扯到符号的问题,符号位不变就行,左移几位就要给右侧末尾加几个零就可以
左移1位,相当于乘2,右移动一位相当于除以2
首先左移的标识是: <<
这里首先看正数的左移
例1 正数8

二进制:1000
原码:1000   
反码:1000
补码:1000
左移2位: 8 << 2
8的补码左移2位(向左移2位,右侧补2个零)后:100000
8的补码左移2位后的补码:100000
8的补码左移2位后的反码:100000
8的补码左移2位后的原码:100000
最终转换成10进制后:32相当于: 8 乘以 22次方

例2 正数55

二进制:110111
原码:110111   
反码:110111
补码:110111
左移3位: 8 << 3
55的补码左移3位(向左移3位,右侧补3个零)后:110111000
55的补码左移3位后的补码:110111000
55的补码左移3位后的反码:110111000
55的补码左移3位后的原码:110111000
最终转换成10进制后:440
相当于: 55 乘以 23次方

例3 负数 -8

二进制:1000 1000
原码:1000 1000   
反码:1111 0111
补码:1111 1000
左移3位: -8 << 3-8的补码左移3位(向左移3位,右侧补3个零)后:1111 1000 000-8的补码左移3位后的补码:1111 1100 000-8的补码左移3位后的反码:1111 0111 111-8的补码左移3位后的原码:1000 1000 000
最终转换成10进制后:-64
相当于: -8 乘以 23次方

例4 负数 -83

二进制:1101 0011
原码:1101 0011  
反码:1010 1100
补码:1010 1101
左移3位: -83 << 3
-83的补码左移3位(向左移3位,右侧补3个零)后:1010 1101 000
-83的补码左移3位后的补码:1010 1101 000
-83的补码左移3位后的反码:1010 1100 111
-83的补码左移3位后的原码:1101 0011 000
最终转换成10进制后:-664
相当于: -83 乘以 23次方

二进制右移

对于正数而言,有符号右移和无符号右移都是一样,左侧都补的是0,与符号位相同
但是对于负数而言,有符号右移和无符号右移是不一样的

有符号二进制右移(>>)

 对于有符号右移而言,不论是正数还是负数,右移几位,就给左侧加几个符号位

这里例子都采用的32进制,int类型占32位,具体结果要看系统中int占位,**** 代表很多个1或者0,具体要看它前面是1还是0 。
例1 正数8

二进制:0000 **** 1000  
原码:0000 ****  1000   
反码:0000 **** 1000
补码:0000 **** 1000
右移2位: 8 >> 2
8的补码右移2位(向右移2位,左侧补2个零,实际上就是补两个符号位,正数符号位为0,这里就补20)后,0000 **** 0010
8的补码右移2位后的补码:0000 **** 0010  
8的补码右移2位后的反码:0000 **** 0010
8的补码右移2位后的原码:0000 **** 0010
最终转换成10进制后:2

例2 正数55

二进制:0000 **** 0011 0111
原码:0000 **** 0011 0111   
反码:0000 **** 0011 0111
右移3位: 8 >> 3
55的补码右移3位(向右移3位,左侧补3个零,实际上就是补3个符号位,正数符号位为0,这里就补30)后:0000 **** 0110
55的补码右移3位后的补码:0000 **** 0110  
55的补码右移3位后的反码:0000 **** 0110
55的补码右移3位后的原码:0000 **** 0110
最终转换成10进制后:6

例3 负数 -8

二进制:1000 0000 **** 1000
原码:1000 0000 **** 1000   
反码:1111 **** 0111
补码:1111 **** 1000
右移3位: -8 >> 3
8的补码右移3位(向右移3位,左侧补31,实际上就是补3个符号位,负数符号位为1,这里就补31)后:1111 **** 1111
8的补码右移3位后的补码:1111 **** 1111
8的补码右移3位后的反码:1111 **** 1110
8的补码右移3位后的原码:1000 **** 0001
最终转换成10进制后:-1

例4 负数 -83

二进制:1000 **** 0101 0011
原码:1000 **** 0101 0011  
反码:1111 **** 1010 1100
补码:1111 **** 1010 1101
右移3位: -83 >> 3
-83的补码右移3位(向右移3位,左侧补31,实际上就是补3个符号位,负数符号位为1,这里就补31)后:1111 **** 1111 0101
-83的补码右移3位后的补码:1111 **** 1111 0101
-83的补码右移3位后的反码:1111 **** 1111 0100
-83的补码右移3位后的原码:1000 **** 0000 1011
最终转换成10进制后:-11

无符号二进制右移(>>>)

无符号右移>>> :不管正负标志位为0还是1,将该数的二进制码整体右移,左边部分总是以0填充,右边部分舍弃。

这里例子都采用的32进制,int类型占32位,具体结果要看系统中int占位,**** 代表很多个1或者0,具体要看它前面是1还是0 。

例1 正数8

二进制:0000 **** 10000是符号位  000 1000是数值位)
原码:0000 **** 1000   
反码:0000 **** 1000
补码:0000 **** 1000
右移2位: 8 >>> 2
8的补码右移2位(向右移2位,左侧补2个零)后,0000 **** 0010
8的补码右移2位后的补码:0000 **** 00100是符号位  000 0010是数值位)
8的补码右移2位后的反码:0000 **** 0010
8的补码右移2位后的原码:0000 **** 0010
最终转换成10进制后:2

例2 正数55

二进制:0000 **** 0011 0111
原码:0000 **** 0011 0111   
反码:0000 **** 0011 0111
右移3位: 8 >>> 3
55的补码右移3位(向右移3位,左侧补3个零)后:0000 **** 0000 0110
55的补码右移3位后的补码:0000 **** 0000 0110  0是符号位  000 0110是数值位)
55的补码右移3位后的反码:0000 **** 0000 0110
55的补码右移3位后的原码:0000 **** 0000 0110
最终转换成10进制后:6

例3 负数 -5

二进制:1000 0000 **** 0101
原码:1000 0000 **** 0101  
反码:1111 1111 **** 1010
补码:1111 1111 **** 1011
右移3位: -5 >>> 3
-5的补码右移3位(向右移3位,左侧补30)后:0001 1111  **** 1111
右移3位后的补码:0001 1111  **** 1111
右移3位后的反码:0001 1111  **** 1111
右移3位后的原码:0001 1111  **** 1111
最终转换成10进制后: 536870911

例4 负数 -83

二进制:1000 0000 **** 0101 0011
原码:1000 0000 **** 0101 0011 
反码:1111 1111 **** 1010 1100 
补码:1111 1111 **** 1010 1101
右移3位: -83 >>> 3
右移3位(向右移3位,左侧补30)后:0001 1111 **** 0101
右移3位后的补码:0001 1111 **** 0101
右移3位后的反码:0001 1111 **** 0101
右移3位后的原码:0001 1111 **** 0101
最终转换成10进制后:1073741813

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

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

相关文章

dataframe保存excel格式比csv格式小很多很多

问题描述&#xff1a; 一个3万行的数据保存成csv大概10个G&#xff0c;但保存成excel格式只有100多M 原因分析&#xff1a; 因为xlsx 实际上就是 zip 压缩包&#xff0c;同时&#xff0c;如果有大量重复的数据&#xff0c;XLSX 会提取文本值&#xff0c;将其存储在查找表中&…

机器学习基础-Pandas学习笔记

Pandas Python的数据分析库&#xff0c;与Numpy配合使用&#xff0c;可以从常见的格式如CSV、JSON等中读取数据。可以进行数据清洗、数据加工工作。数据结构Series&#xff0c;Pandas.Series(data,index,dtype,name,copy) data类型是Numpy的ndarray类型&#xff0c;index指定下…

华为云云耀云服务器L实例评测|部署项目管理工具 Focalboard

华为云云耀云服务器L实例评测&#xff5c;部署项目管理工具 Focalboard 一、云耀云服务器L实例介绍1.1 云服务器介绍1.2 产品优势1.3 产品规格1.4 应用场景 二、云耀云服务器L实例配置2.1 重置密码2.2 服务器连接2.3 安全组配置 三、部署 Focalboard3.1 Focalboard 介绍3.2 Doc…

springboot3+grpc+zipkin+Micrometer配置

1. maven依赖 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.1.2</version></parent><properties><java.version>21</java.version>…

2023年中国CEM-1型覆铜板产量、需求量及行业销售收入分析[图]

CEM-1指覆铜板的一种&#xff0c;以玻纤布半固化片与纸基半固化片层压铜箔达到固化后形成的板材&#xff0c;属于复合型基材&#xff0c;CEM-1能用来制作频率特性要求高的PCB&#xff0c;如电视机的调谐器、电源开关、超声波设备、计算机电源和键盘&#xff0c;也可以用于电视机…

Xcode 15 编译出错问题解决

正常升级xcode 15以后发现原来没有出现报错的代码&#xff0c;现在出现了编译错误。&#xff08;如果没有出现请忽略&#xff09;下面教你如何解决这个问题。 1、pod update更新cocoapods&#xff0c;因为其根据xcode15做了很多的更新&#xff0c;保证cocoapods是最新的。 千…

【19】c++设计模式——>桥接模式

桥接模式的定义 C的桥接模式&#xff08;Bridge Pattern&#xff09;是一种结构型设计模式&#xff0c;它将抽象部分与实现部分分离&#xff0c;使得它们可以独立地变化。桥接模式的核心思想是利用组合关系代替继承关系&#xff0c;将系统划分成多个独立的、功能不同的类层次结…

Suricata + Wireshark离线流量日志分析

目录 一、访问一个404网址&#xff0c;触发监控规则 1、使用python搭建一个虚拟访问网址 2、打开Wireshark,抓取流量监控 3、在Suricata分析数据包 流量分析经典题型 入门题型 题目&#xff1a;Cephalopod(图片提取) 进阶题型 题目&#xff1a;抓到一只苍蝇(数据包筛选…

c语言练习题83:#include“ “和#include<>的区别

#include" "和#include<>的区别 #include<> 默认根据环境变量的值去先搜索标准库&#xff0c;搜索系统文件会比较快。 #include“” 先搜索当前工程的路径&#xff0c;搜索自己自定义的文件会比较快。 因此自定义的头文件的名称包含在<>中的话…

node.js知识系列(3)-每天了解一点

目录 1. Express.js 中的中间件2. 处理路由和请求3. RESTful 路由4. 身份验证和授权5. 视图引擎6. 错误处理中间件7. 文件上传处理8. Cookie 和 Session 管理9. 路由参数和查询参数10. 处理跨域请求&#xff08;CORS&#xff09; &#x1f44d; 点赞&#xff0c;你的认可是我创…

Android PackageManager的妙用

判断是否是系统应用 private boolean isSystemApp(String pkgName) {if (null pkgName || TextUtils.isEmpty(pkgName)) {return false;}try {PackageInfo info getPackageManager().getPackageInfo(pkgName, PackageManager.GET_SIGNATURES);if ((info.applicationInfo.flag…

【Docker】Docker的工具实践及root概念,时间戳的概念和Docker容器安全性设置的详细讲解

作者简介&#xff1a; 辭七七&#xff0c;目前大二&#xff0c;正在学习C/C&#xff0c;Java&#xff0c;Python等 作者主页&#xff1a; 七七的个人主页 文章收录专栏&#xff1a; 七七的闲谈 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01;&#x1f496;&#x1f…

运行软件提示丢失msvcr120.dll文件怎么办?msvcr120.dll丢失的5个最新解决方法

找不到msvcr120.dll是一个常见的错误信息&#xff0c;通常会在用户尝试运行某些程序或游戏时出现。msvcr120.dll是 Windows 操作系统中的一个动态链接库文件&#xff0c;它包含了 C 运行时库的一些函数和类&#xff0c;对于许多程序和游戏的正常运行至关重要。 当用户遇到找不到…

dockers --cap-add 哪些值可以设置

--cap-add 参数可以用于向 Docker 容器添加不同的权限。除了 NET_ADMIN&#xff0c;还有一些其他常用的权限值&#xff0c;包括&#xff1a; SYS_ADMIN&#xff1a;添加系统管理员权限&#xff0c;允许容器内的进程执行系统级别的管理操作&#xff0c;如挂载文件系统、设置时间…

使用NVM管理nodejs

Windows 1、查看本地安装的所有版本 nvm list 查看电脑上已安装的nodejs版本号 nvm list available 显示所有可下载的nodejs版本号 2、安装需要使用的node版本号 nvm install 10.16.0 3、使用该版本号 nvm use 10.16.0 4.卸载nodejs版本号 nvm uninstall 10.16.0 ⑧nvm常用…

结构性货币政策工具详解:碳减排支持工具、支小再贷款、再贴现等

一、概述 近年来&#xff0c;人民银行认真贯彻落实党中央、国务院决策部署&#xff0c;发挥好货币政策工具的总量和结构双重功能&#xff0c;围绕支持普惠金融、绿色发展、科技创新等国民经济重点领域和薄弱环节&#xff0c;服务经济高质量发展&#xff0c;逐步构建了适合我国…

POI 和 EasyExcel 操作 Excel

一、概述 目前操作 Excel 比较流行的就是 Apache POI 和阿里巴巴的 easyExcel。 1.1 POI 简介 Apache POI 是用 Java 编写的免费开源的跨平台的 Java API&#xff0c;Apache POI 提供 API 给 Java 程序对 Microsoft Office 格式文档读和写的常用功能。POI 为 “Poor Obfuscati…

一般香港服务器带宽选多大够用?(带宽计算方法)

​  在海外IDC市场份额中&#xff0c;香港服务器依托自身优越的服务器资源条件&#xff0c;在各个行业中发挥的重要作用。但是&#xff0c;不同业务对网络带宽的要求各不相同&#xff0c;弄清楚如何计算带宽需求对于确保业务平稳运行至关重要&#xff0c;最好从一开始就使用正…

039:mapboxGL更换地图上的鼠标样式

第039个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+mapbox中更换地图上的鼠标的样式。 直接复制下面的 vue+mapbox源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共74行)相关API参考:专栏目标示例效果 配置方式 1)查看基础设置:htt…

012-第二代硬件选型

第二代硬件选型 文章目录 第二代硬件选型项目介绍重新换平台缘由X86 && Arm 架构切换 ARM Linux 硬件选型系统确定Qt 版本确定总结一下 关键字&#xff1a; Qt、 Qml、 Arm、 X86、 linux 项目介绍 欢迎来到我们的 QML & C 项目&#xff01;这个项目结合了 QM…