Java 中字节移位的奇怪行为

2023-12-03

当我使用位移位时byte,我注意到使用无符号右移时得到了奇怪的结果(>>>). With int,均右移(符号:>>和未签名:>>>) 表现如预期:

    int min1 = Integer.MIN_VALUE>>31; //min1 = -1
    int min2 = Integer.MIN_VALUE>>>31; //min2 = 1

但是当我做同样的事情时byte,无符号右移会发生奇怪的事情:

    byte b1 = Byte.MIN_VALUE; //b1 = -128
    b1 >>= 7; //b1 = -1

    byte b2 = Byte.MIN_VALUE; //b2 = -128
    b2 >>>= 7; //b2 = -1; NOT 1!
    b2 >>>= 8; //b2 = -1; NOT 0!

我认为编译器可能正在转换byte to int在内部,但似乎不足以解释这种行为。

为什么 Java 中的字节位移位会有这样的表现?


发生这种情况正是因为byte is promoted to int在执行按位运算之前。int -128表示为:

11111111 11111111 11111111 10000000

因此,右移到 7 或 8 位仍然留下第 7 位 1,所以结果是narrowed为负数byte value.

比较:

System.out.println((byte) (b >>> 7));           // -1
System.out.println((byte) ((b & 0xFF) >>> 7));  //  1

By b & 0xFF,所有最高位在移位之前都被清除,因此结果按预期产生。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 中字节移位的奇怪行为 的相关文章

  • 使用 java 从 XML 元素中删除空格

    我有一个 JSON 如下 String str Emp name JSON Emp id 1 Salary 20997 00 我想使用 java 将此 JSON 转换为 XML 我的 java 代码在这里 JSON json JSONSer
  • 无法执行目标 org.codehaus.mojo:exec-maven-plugin:1.5.0:exec

    三周前 我完成了一个网络应用程序的工作 一切都运行没有问题 现在 三周后 没有任何更改 我想再次运行该应用程序 但这次我收到以下错误消息 An error occurred while parsing the server response
  • Javadoc 链接到其他类中的方法

    目前我正在使用以下 Javadoc 语法引用其他类中的方法 see link com my package Class method 据我从文档中了解到 这是执行此操作的正确方法 但现在到了有趣的部分 或者说令人沮丧的部分 当我生成这个 j
  • 浏览时 Java Applet 不会被终止

    当用户离开加载小程序的页面时 如何停止 Java 小程序的进程 我正在使用 Chrome 现在要杀死小程序 我必须使用窗口的任务栏并杀死进程 java exe Java applet 具有生命周期方法 那些是init start stop
  • 从 Windows Batch (cmd.exe) 中的文件读取环境变量

    我正在尝试从批处理文件中读取变量 以便稍后在批处理脚本 Java 启动器 中使用 理想情况下 我希望所有平台 Unix Windows 上的设置文件都具有相同的格式 并且也是有效的 Java 属性文件 也就是说 它应该看起来像这样 sett
  • .NET 世界有 Maven 替代方案或端口吗?

    NET 世界有 Maven 替代方案或端口吗 我很想使用 Java 世界拥有的良好依赖管理系统 但我没有找到任何可与 NET 项目相媲美的系统 NMaven http incubator apache org nmaven 是第一个 官方努
  • Netbeans 雷达插件配置

    我使用的是 Netbeans 8 0 1 在提交到 SVN 之前 我需要从 IDE 运行并检查 SonarQube 分析 我已经安装了 Netbeans Radar 插件 用于启动本地分析并检查结果 这个插件有一个名为 Get Issues
  • 如何增加使用 SAX 解析 XML 文件的entityExpansionLimit

    我正在尝试使用 Java 中的 SAX 解析器解析一个 1 23 GB 的 XML 文件 我使用的是 Mac 操作系统和 JDK 1 7 0 51 不幸的是 我收到以下错误 The pasrser has encountered more
  • Runtime.getRuntime().exec(cmd) 挂起

    我正在执行一个命令 该命令返回文件的修订号 文件名 但如果执行命令时出现问题 应用程序就会挂起 我可以做什么来避免这种情况 请在下面找到我的代码 String cmd cmd C si viewhistory fields revision
  • xclock 工作,X11 DISPLAY 设置但仍然 java.awt.HeadlessException:

    获取 java awt HeadlessException 似乎是一个非常常见的问题 并且 中已经讨论过 以下问题 没有 X11 DISPLAY 变量 这是什么意思 https stackoverflow com questions 662
  • CompletableFuture SupplyAsync

    我刚刚开始探索 Java 8 的一些并发特性 让我有点困惑的一件事是这两个静态方法 CompletableFuture
  • 何时对字符串文字使用 intern()

    我看到很多这样的遗留代码 class A public static final String CONSTANT value intern 我看不出使用 intern 的任何原因 因为在 Javadoc 中可以读到 所有文字字符串和字符串值
  • Thread.interrupt() 和 Thread.interrupted() 到底是如何工作的? [复制]

    这个问题在这里已经有答案了 从设置线程状态的角度来看 我不清楚这两种方法 Java 文档说 Thread interrupt 设置线程中断状态标志 调用 Thread interrupted 方法给出线程的状态并清除该标志 当这在实际场景中
  • Android Studio错误的含义:未注释的参数覆盖@NonNull参数

    我正在尝试 Android Studio 创建新项目并添加默认值后onSaveInstanceState方法创建 MyActivity 类 当我尝试将代码提交到 Git 时 我收到一个我不明白的奇怪错误 代码是这样的 我得到的错误是这样的
  • 将 JPanel 添加到 JFrame

    我有一个程序 其中将 JPanel 添加到 JFrame public class Test Test2 test new Test2 JFrame frame new JFrame Test frame setLayout new Bor
  • 尝试用Java实现基于文本的Hangman游戏

    我需要检查用户输入的字母以及他们猜测的空格是否位于隐藏单词的特定位置 变量one等于用户猜测的空间索引 而letterGuess是他们猜测的字母 我的代码怎么错了 示例 秘密词是你好 hidden word is 用户猜测h 0 1 2 3
  • 如何根据受保护的 String doInBackground 方法中 AsyncTask 的结果调用 Toast.makeText() ?

    我从 AsyncTask 中的数据库中获取数据 如果它为空 我想吐司一个警告文本 我在 AsyncTask 中尝试过 但我了解到它不是在工作线程中调用的 这是我的 doInBackground 方法 protected String doI
  • 枚举

    我试图拥有一组扩展通用接口的枚举 例如 interface Fooable void someCommonMethod enum E1 implements Fooable some enumuerations and a definiti
  • 如何在 Android 应用程序退出之前进行一些清理?

    当我的 Android 应用程序终止时 是否有某种 onTerminate 方法可以进行一些清理 我想清除一些 SharedPreferences 我有一个活动 它保持几个数字的运行平均值 并将其存储在 SharedPreference 中
  • 在地图中的图块上实现鼠标单击事件

    我正在尝试在 JPanel 上实现图像 基本上是地图上的图块 的鼠标单击事件 我只是不知道该怎么做 我有一个扩展 JPanel 的 Main 类 我正在从图块服务器检索图块 并根据特定的缩放级别在 Main 类的 PaintComponen

随机推荐

  • dataWithContentsOfURL 通过蜂窝网络返回 NSCocoaErrorDomain Code=256,但不通过 wifi 返回

    我遇到了一个非常奇怪的问题 dataWithContentsOfURL 已开始通过蜂窝网络返回错误代码 256 但不通过 wifi 返回错误代码 操作无法完成 可可错误 256 我确实有蜂窝数据连接 并且它正在运行 所以我的蜂窝连接不是问题
  • 在 WooCommerce 中添加到购物车之前尽早设置运输邮政编码

    我希望客户能够在将产品添加到购物车之前设置他们的邮政编码 然后保存该邮政编码并用于定义可用的交付方式 我已经制作了以下功能 但它并不总是有效 而且我不确定应该使用哪些 Woocommerce 方法以及它们之间有什么区别 WC gt cust
  • 空数组自动初始化内容?

    How come int alone System out println alone 给出错误但是 int arr new int 1 System out println arr 0 等于0 当你初始化一个空数组时 它是否会自动将其内容
  • JSF 托管 bean 修改后重新部署应用程序

    为什么 JSF 托管 Bean 修改需要重新部署应用程序才能生效 开发环境 日食靛蓝 JBoss为7 JBossAS 工具 进一步解释 如果我修改 JSF 页面 只需刷新页面即可可视化修改 但 JSF 托管 bean 修改的情况并非如此 我
  • 在 SSE/AVX 中高效计算 X 的幂

    我正在寻找最有效的方法来计算浮点数的所有第一个整数幂XSSE 128 AVX 256 AVX 512 寄存器内部 128 256 和 512 位 例如对于 float AVX1 256 我想进入寄存器X 1 X 2 X 3 X 4 X 5
  • 屏幕键盘 gui 无法正常工作

    我正在尝试在顶部显示文本区域并在其下方显示键盘键 但是当我运行此代码时 整个事情是混合的 我做错了什么以及如何解决它 这是代码 public Keyboard super Typing Tutor pane1 new JPanel pane
  • 将 Microsoft Ajax Minifier 与 Web 安装项目和源代码管理结合使用

    我刚刚开始调查微软 Ajax 缩小器 4 0与我正在开发的 Visual Studio 2008 Web 应用程序一起使用 事实证明 将其挂接到 csproj 文件中非常容易 因此它为所有脚本生成 min js 文件 但是我对如何将其与 W
  • A 类声明多个 JSON 字段

    我有一个类 A 它有一些私有字段 同一个类扩展了另一个类 B 它也有一些类 A 中的私有字段 public class A extends B private BigDecimal netAmountTcy private BigDecim
  • R - 传单 - highcharter 工具提示

    我想包括一个highcharter情节在我的leaflet弹出窗口 在来自的帮助下this帖子我能够包括sparkline阴谋 但是 由于我缺乏 html 技能 我不知道如何修改代码来使用highcharter 这个答案关于SO 答案中的示
  • Logstash 5.1.1“错误的 URI(不是 URI?)”

    Error c Program Files Logstash bin gt logstash bat e 输入 stdin 输出 stdout 发生意外错误 错误 gt 错误的 URI 不是URI File c Program Files
  • MongoDB 全文搜索,两个字段自动完成

    我正在尝试实施MongoDB 图集搜索 目标是在 2 个字段上自动完成 我目前有这个实现 const searchStep search Read more about compound here https docs atlas mong
  • PDFbox 找不到字体:/Helv

    我尝试将表单字段添加到现有 PDF 文件 但出现以下错误PDFbox Could not find font Helv 我的 Java 代码具有以下视图 PDDocument pdf PDDocument load inputStream
  • 我该如何处理这样的物体

    我需要以表格形式显示错误 如果子级中定义了错误 则可以将错误附加到输入名称表单中 这是常见情况 1 但可能会发生错误是在 json 对象的根节点中定义的 2 在这种情况下 应将其附加到 formElement 以下代码 3 适用于情况 1
  • C2DM 服务器。我们现在应该使用 OAuth 吗?

    我正在为我的 Android 应用程序实现 C2DM 客户端 Android 进展顺利 但我对实现服务器端有点困惑 我的服务器是C NET 官方文档链接到 404 当涉及到身份验证时 https developers google com
  • 类型不匹配错误。 F# 类型推断失败?

    我正在尝试在 F 中编写一个方法 该方法根据传递到该方法的值的类型返回泛型类型的新实例 在金融服务指数中 open System Collections Generic type AttributeIndex lt a gt inherit
  • 在 C++ 中获取准确的执行时间(微秒)

    我想获得用 C 实现的程序的精确执行时间 以微秒为单位 我尝试使用clock t获取执行时间 但它不准确 请注意 微基准测试是hard 准确的计时器只是短时间区域获得有意义的结果所需的一小部分 看绩效评估的惯用方式 一些更一般的注意事项 如
  • 通过 EnvDTE 以编程方式更改 Visual Studio 项目的调试属性

    是否可以通过 EnvDTE 类以编程方式更改调试部分中的项目属性 我知道如何获取 DTE 实例并使用某些设置 但我是盲目的 或者调试部分无法访问 我从这里开始http msdn microsoft com en us library env
  • 是否可以使用 PHP 或 Apache 从客户端获取网络域?

    我正在研究一种解决方案来识别专用网络中的客户端网络域或工作组 基于此 我必须更改一些访问权限 我无法通过 IP 地址做到这一点 因为它不可信 只能通过网络域 工作组 由于我不知道的原因 我无法登录屏幕 访问必须是自动且无缝的 有人知道我该怎
  • “with”语句中变量的范围?

    我只读书firstline从 python 使用 with open file path r as f my count f readline print my count 我对变量 my count 的范围有点困惑 虽然打印效果很好 但是
  • Java 中字节移位的奇怪行为

    当我使用位移位时byte 我注意到使用无符号右移时得到了奇怪的结果 gt gt gt With int 均右移 符号 gt gt 和未签名 gt gt gt 表现如预期 int min1 Integer MIN VALUE gt gt 31