当前位置: 首页 > news >正文

java中右移>>和无符号右移>>>的区别

public static void main(String[] args) {byte[] dest = new byte[2];dest[0] = 0x15; //0001 0101dest[1] = (byte) 0xfb;//1111 1011System.out.println((dest[0] >> 4) & 0xff);//右移 应该是0000 0001 十进制结果显示1 结果也是1,正确System.out.println((dest[1] >> 4) & 0xff);//右移 我们想要的是0000 1111 十进制结果显示15,但是结果是255,二进制1111 1111System.out.println((dest[1] >>> 4) & 0xff);//无符号右移 我们想要的是0000 1111 十进制结果显示15,但是结果是255,二进制1111 1111System.out.println(((dest[1] & 0xff) >>> 4) & 0xff);//无符号右移 我们想要的是0000 1111 十进制结果显示15,结果也是15 正确}

为什么右移与想要的结果不同,可以先看下《计算机组成与结构 - 数值的编码方式》,在Java,byte的表示的值为-2^7
到 2^7-1,所以超过127整数是其本身减与其相差最小的256的倍数,在这里 251-256 = -5,右移动指定的位数后,左边空出的位用原来的符号位填充,所有第二个输出是错误的。

为什么第三个输出的结果也是不正确的?
首先我们看下改文件编译后的字节码文件:
在这里插入图片描述
通过LineNumberTable对照可以看出,字节码文件的44-59之间是源文件19行的内容

在这里插入图片描述
从48,50,51可以看出,指令的第一个字母都是i,而在字节码指令中,操作码助记符中都有特殊的字符来表明专门为哪种数据类型服务:i 代表对 int 类型的数据操作,l 代表 long,s 代表 short,b 代表 byte,c 代表 char,f 代表 float,d 代表 double,a 代表 reference
在编译器编译时,都把要操作的类型转为了int类型,0xfb编译后二进制1111 1111 1111 1111 1111 1111 1111 1011,无符号位右移4位,变为 (0000) 1111 1111 1111 1111 1111 1111 1111,&上0xff,结果为1111 1111 十进制为255。
在这里插入图片描述

结论

有符号右移(>>):将二进制数向右移动指定的位数,左边空出的位用原来的符号位填充。例如,对于正数,右移后高位补0;对于负数,右移后低位补1。

无符号右移(>>>):将二进制数向右移动指定的位数,左边空出的位用0填充。无论原数是正数还是负数,右移后高位都补0。

对于byte类型的数据无符号位右移时,编译器会把byte类型强转为int类型,想要获得正确的结果在无符号位移前先&0xff

相关文章:

java中右移>>和无符号右移>>>的区别

public static void main(String[] args) {byte[] dest new byte[2];dest[0] 0x15; //0001 0101dest[1] (byte) 0xfb;//1111 1011System.out.println((dest[0] >> 4) & 0xff);//右移 应该是0000 0001 十进制结果显示1 结果也是1,正确System.out.printl…...

牛客周赛 Round 7

目录 A 游游的you矩阵 题目: 题解: AC 代码: B 游游的01串操作 题目: 题解: AC 代码: C 游游的正整数 题目: 题解: AC 代码: D 游游的选数乘积 题目&#xf…...

R语言生存分析(机器学习)(1)——GBM(梯度提升机)

GBM是一种集成学习算法,它结合了多个弱学习器(通常是决策树)来构建一个强大的预测模型。GBM使用“Boosting”的技术来训练弱学习器,这种技术是一个迭代的过程,每一轮都会关注之前轮次中预测效果较差的样本,…...

k8s和docker简单介绍

当涉及到容器技术和容器编排时,Docker和Kubernetes是两个重要的概念。我将更详细地介绍它们以及它们之间的关系。 Docker: Docker是一种容器化技术,它允许你将应用程序及其依赖项打包到一个称为"容器"的封闭环境中。每个容器都包…...

Lua学习记录

Lua基础了解 Lua的注释通过 (-- 单行注释,--[[ ]] 多行注释)可以不加; 多个变量赋值,按顺序赋值,没有则为nil; function的简单用法,多个返回值配合多重赋值,以end为结束标志 Lua下标从1开始&…...

三分钟完美解决你的C盘内存过大爆红

一、清理回收站 二、清理桌面 建议一 不要在桌面放太多图标或者文件会占用过多的内存,可以放到其他盘建议二、 将位置移动到别的盘 三、手动删除下载文件与缓存文件 日常使用中会通过Windows下载各种文件资料到电脑中,它默认也是直接下载在C盘中的。如果我们在以…...

C++ - equal(比较两个vector元素)

C标准库的std::equal函数。这个函数用于比较两个范围的元素是否相等。 在使用std::equal函数时,您需要提供两个范围的迭代器,以及一个可选的谓词函数(predicate)。函数会比较第一个范围内的元素和第二个范围内的元素是否相等。如果…...

多线程:线程池

线程池 提前创建多个线程放入线程池中,使用时直接获取,使用完直接放入池中;可以避免频繁创建销毁,实现重复利用,类似生活中的公共交通工具。好处:提高相应速度;降低资源消耗;便于线…...

9.3.2.2网络原理(传输层TCP)

TCP全部细节参考RFC标准文档 一.TCP特点: 有连接,可靠传输,面向字节流,全双工. 二.TCP数据报: 1.端口号是传输层的重要概念. 2.TCP的报头是变长的(UDP是固定的8字节),大小存在4位首部长度中,用4个bit位(0~15)表示长度单位是4字节.(TCP报头最大长度是60字节,前面20字节是固定…...

ssm+mybatis无法给带有下划线属性赋值问题

原因:mybaitis根据配置,将有下划线的字段名改为了驼峰格式。 具体见:ssmmybatis无法给带有下划线属性赋值问题,无法获取数据库带下划线的字段值 - 开发者博客 解决方式: 直接将实体类中的下划线去掉返回值使用resul…...

学习笔记-JVM监控平台搭建

SpringBoot Actuator 1 引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId> </dependency>2 开启配置 # 暴露所有的监控点【含Prometheus】 management.endpoin…...

使用css实现时间线布局(TimeLine)

前言 在使用uni-app开发微信小程序过程中&#xff0c;遇到了时间轴布局&#xff0c;由于每项的内容高度不一致&#xff0c;使用uniapp自带的扩展组件uni-steps&#xff0c;样式布局无法对齐竖线&#xff0c;于是自己造轮子&#xff0c;完成特殊的布局。显示效果如下&#xff1…...

深入浅出 栈和队列(附加循环队列、双端队列)

栈和队列 一、栈 概念与特性二、Stack 集合类及模拟实现1、Java集合中的 Stack2、Stack 模拟实现 三、栈、虚拟机栈、栈帧有什么区别&#xff1f;四、队列 概念与特性五、Queue集合类及模拟实现1、Queue的底层结构&#xff08;1&#xff09;顺序结构&#xff08;2&#xff09;链…...

前端基础(二)

前言&#xff1a;前端开发框架——Vue框架学习。 准备工作&#xff1a;添加Vue devtools扩展工具 具体可查看下面的这篇博客 添加vue devtools扩展工具添加后F12不显示Vue图标_MRJJ_9的博客-CSDN博客 Vue官方学习文档 Vue.js - 渐进式 JavaScript 框架 | Vue.js MVVM M…...

ORB-SLAM2学习笔记7之System主类和多线程

文章目录 0 引言1 整体框架1.1 整体流程 2 System主类2.1 成员函数2.2 成员变量 3 多线程3.1 ORB-SLAM2中的多线程3.2 加锁 0 引言 ORB-SLAM2是一种基于特征的视觉SLAM&#xff08;Simultaneous Localization and Mapping&#xff09;系统&#xff0c;它能够从单个、双目或RBG…...

gin的占位符:和通配符*

1、用法 在 Gin 路由中&#xff0c;可以使用一个通配符&#xff08;*&#xff09;或一个占位符&#xff08;:&#xff09;来捕获 URL 的一部分。 r.GET("/royal/:id", func(c *gin.Context) {id : c.Param("id")//fmt.Println("into :id")c.Str…...

【量化课程】08_2.深度学习量化策略基础实战

文章目录 1. 深度学习简介2. 常用深度学习模型架构2.1 LSTM 介绍2.2 LSTM在股票预测中的应用 3. 模块分类3.1 卷积层3.2 池化层3.3 全连接层3.4 Dropout层 4. 深度学习模型构建5. 策略实现 1. 深度学习简介 深度学习是模拟人脑进行分析学习的神经网络。 2. 常用深度学习模型架…...

12-数据结构-数组、矩阵、广义表

数组、矩阵、广义表 目录 数组、矩阵、广义表 一、数组 二.矩阵 三、广义表 一、数组 这一章节理解基本概念即可。数组要看清其实下标是多少&#xff0c;并且二维数组&#xff0c;存取数据&#xff0c;要先看清楚是按照行存还是按列存&#xff0c;按行则是正常一行一行的去读…...

Idea 反编译jar包

实际项目中&#xff0c;有时候会需要更改jar包源码来达到业务需求&#xff0c;本文章将介绍一下如何通过Idea来进行jar反编译 1、Idea安装decompiler插件 2、找到decompiler插件文件夹 decompiler插件文件夹路径为&#xff1a;idea安装路径/plugins/java-decompiler/lib 3、…...

【Git】安装以及基本操作

目录 一、初识Git二、 在Linux底下安装Git一&#xff09;centOS二&#xff09;Ubuntu 三、 Git基本操作一&#xff09; 创建本地仓库二&#xff09;配置本地仓库三&#xff09;认识工作区、暂存区、版本库四&#xff09;添加文件五&#xff09;查看.git文件六&#xff09;修改文…...

告别重复编码:用快马平台内置codex服务高效生成日常开发代码片段

今天想和大家分享一个提升开发效率的实用技巧——如何利用智能工具告别重复编码的烦恼。作为开发者&#xff0c;我们每天都要写大量重复的样板代码&#xff0c;比如创建数据类、编写单元测试模板、定义React组件等。这些工作虽然简单&#xff0c;但累积起来会消耗大量时间。 传…...

TypeC接口改造全攻略:从MicroUSB到TypeC的电路设计与PCB制作(含免费设计文件)

Type-C接口改造全攻略&#xff1a;从MicroUSB到Type-C的电路设计与PCB制作 最近整理工作室时翻出一堆老设备&#xff0c;清一色配备MicroUSB接口。看着手边越来越多的Type-C线材&#xff0c;突然意识到是时候给这些"老伙计"升级接口了。作为硬件开发者&#xff0c;我…...

二维码逆向工程:从01二进制到可扫描二维码的完整流程

二维码逆向工程&#xff1a;从01二进制到可扫描二维码的完整流程 二维码已成为现代生活中不可或缺的信息载体&#xff0c;但你是否想过&#xff0c;一串简单的0和1如何转化为可扫描的二维码&#xff1f;本文将带你深入探索二维码的逆向工程世界&#xff0c;从二进制数据处理到图…...

告别理论推导!用《有源滤波器的快速实用设计》手把手搞定1kHz带通滤波器(附Multisim仿真)

1kHz带通滤波器实战指南&#xff1a;从查表到仿真的全流程解析 在电子设计竞赛或音频信号处理项目中&#xff0c;带通滤波器是高频出现的核心模块。许多工程师都曾陷入这样的困境&#xff1a;明明掌握了滤波器原理&#xff0c;面对"设计一个中心频率1kHz、带宽200Hz的带通…...

Win11Debloat:轻松打造极速、纯净Windows 11的终极指南

Win11Debloat&#xff1a;轻松打造极速、纯净Windows 11的终极指南 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and c…...

像素史诗·智识终端Claude Code实践:自动化代码生成与审查

像素史诗智识终端Claude Code实践&#xff1a;自动化代码生成与审查 1. 开发者的新助手 最近在开发圈里&#xff0c;一个叫"像素史诗智识终端"的工具开始引起关注。它集成了类似Claude Code的智能代码能力&#xff0c;正在改变开发者们日常工作的方式。想象一下&am…...

戴森球计划蓝图库:从模块化部署到系统思维的生产革命

戴森球计划蓝图库&#xff1a;从模块化部署到系统思维的生产革命 【免费下载链接】FactoryBluePrints 游戏戴森球计划的**工厂**蓝图仓库 项目地址: https://gitcode.com/GitHub_Trending/fa/FactoryBluePrints 在戴森球计划的浩瀚宇宙中&#xff0c;高效的工厂设计是星…...

为什么你的背包背带总在“溜肩”?

Q&#xff1a;为什么有些背包的背带总是往下滑&#xff0c;调整多次也没用&#xff1f; A&#xff1a;这通常是背带“S形曲线”设计不合理导致的。专业背包的肩带并非简单的直线&#xff0c;而是根据人体锁骨和肩胛骨的自然弧度&#xff0c;采用8-12度的复合曲面设计。迪先实验…...

新手友好:5步完成Llama3-8B对话系统的本地部署

新手友好&#xff1a;5步完成Llama3-8B对话系统的本地部署 1. 引言&#xff1a;为什么选择Llama3-8B&#xff1f; 如果你对AI对话模型感兴趣&#xff0c;想自己动手搭建一个&#xff0c;但又担心过程太复杂、电脑配置不够&#xff0c;那今天这篇文章就是为你准备的。 Meta-L…...

Realistic Vision V5.1虚拟摄影棚教程:自定义ControlNet姿势控制技巧

Realistic Vision V5.1虚拟摄影棚教程&#xff1a;自定义ControlNet姿势控制技巧 1. 项目概述 Realistic Vision V5.1虚拟摄影棚是基于当前最先进的写实风格生成模型开发的本地化工具&#xff0c;能够帮助用户轻松创建专业级摄影作品。这个工具特别适合需要高质量人像生成但又…...