如何在Java中执行无符号到有符号的转换?

2023-11-23

假设我从输入设备读取了这些字节:“6F D4 06 40”。该数字是毫弧秒格式的经度读数。最高位 (0x80000000) 基本上始终为零,并且在本问题中被忽略。

我可以轻松地将字节转换为unsigned整数:1876166208

但是如何将该无符号值转换为其最终形式的 31 位有符号整数呢?

到目前为止,我想出的只是:

  1. 如果 value & 0x40000000 那么它实际上是负数,需要转换它
  2. 如果它是负数,则去掉顶部的位并对剩余的位执行一些操作......

所以我可以判断它是否是负数,但为了知道负数是什么值,我必须对剩余的位做一些事情 - 一个人的赞美?我如何在 Java 中做到这一点?

另一种提出问题的方式是,如何在 Java 中将无符号整数转换为 31 位有符号整数?

谢谢你!


答案取决于输入的低 31 位代表什么。

int input = 0x6FD40640 & 0x7FFFFFFF; //strip top bit; only here for clarity

无符号输入:0x6FD40640 == 1876166208

二进制补码(所需输出:-271317440)

A 二进制补码整数是 -1 已设置所有位的整数,并且较低的负数从那里向下计数。第一个位仍然充当符号位。

1000 -> -8
1001 -> -7
...
1110 -> -2
1111 -> -1
0000 ->  0
0001 ->  1

如果低 31 位代表二进制补码整数,那么我认为你应该能够这样做:

input = (input << 1) >> 1;

这是因为 Java 在内部以二进制补码存储整数:我们所做的就是左移然后右移(有符号),以便符号位被拾取并且整数从 31 位变为 32 位。

补码(所需输出:-802424384)

A 一个人的补语数字表示的第一位是专用符号位,其余位表示大小。 -100 的低位将与 100 的低位相同:

 1111 -> -7
 1110 -> -6
 ...
 1001 -> -1
 1000 -> -0 (anomoly)
 0000 ->  0
 0001 ->  1

如果低 31 位代表一个人的补语整数(即一个符号位后跟代表无符号数值的 30 位),那么您需要将其转换为二进制补码,以便 Java 正确提取该值。为此,您只需提取低 30 位并乘以 -1:

if ( input & 0x40000000 ) {
   input = (input & 0x3FFFFFFF) * -1;
}

您在问题的评论中说过,转换为度数(除以 3600000)后,您得到的值约为 -75.36。当我将 -271317440 除以 3600000 时,得到 -75.36595555555556,所以我猜你的输入格式是二进制补码,所以我的第一个原始答案是正确的。

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

如何在Java中执行无符号到有符号的转换? 的相关文章

随机推荐

  • 工具栏在 Android 4.X 设备上不可见

    我刚刚将 android support appcompat lib 更新到 22 1 1 工具栏在 Lollipop 设备上可见 但在 4 X 设备上不可见 我什至尝试扩展 AppCompatActivity 但仍然没有运气 如果需要其他
  • 如何在适配器中启动Activity?

    我有一个带有自定义适配器的 ListActivity 并且在每个视图内 它可能有一些按钮 我需要在其中实现OnClickListener 我需要实施OnClickListener在适配器中 但是 我不知道如何调用该函数startActivi
  • rebar无法从github获取依赖

    我无法得到any使用 rebar 来自 github 的依赖 rebar config file sub dirs rel deps dir deps erl opts debug info deps thrift erl 0 5 0 gi
  • 在包含的模型上使用 limit()

    The Code 假设我有两个模型 名为Product and Image 它们通过以下方式链接Product hasMany Image and Image belongsTo Product 现在 假设我想获取所有带有第一张图片的产品
  • ASP.NET MVC4 多语言数据注释

    在标准应用程序中 我有以下内容 Required DisplayName Email Address public string EmailAddress get set 这反过来会自动为该表单字段生成英文标签 现在 如果我需要我的应用程序
  • VBA自动过滤器不等于

    Sub Macro1 Remove all except validated ActiveSheet Range A 1 H 5202 AutoFilter field 8 Criteria1 lt gt Validated Actives
  • 背景图像:url(“images/plaid.jpg”)无重复;不会出现

    我似乎无法将 plaid jpg 作为任何页面的背景 更不用说所有页面了 我尝试通过 body html home 的特定 id 来选择它 没有任何作用 该图像为 300 x 421 像素 我不需要它漂亮地出现 我只是想让它在一切背后出现
  • 如何使UIImagePickerController StatusBar lightContent风格?

    当我呈现 UIImagePickerController 时状态栏文本颜色仍然是黑色 如何制作这样的 只需三步 1 Add UINavigationControllerDelegate UIImagePickerControllerDele
  • n 球坐标系到笛卡尔坐标系

    Is there any efficient way of changing between Cartesian coordinate system and n spherical one The transformation is as
  • 如何设置 GraphQL 查询,以便需要一个或另一个参数,但不能同时需要两者

    我刚刚开始掌握 GraphQL 我设置了以下查询 type UserType args id name id type new GraphQLNonNull GraphQLID email name email type new Graph
  • 为什么我无法更改 Rhino Mocks 存根对象中的返回值?

    如果这是一个愚蠢的问题 请原谅我 但我在嘲笑方面还很陌生 并且正在努力解决这个问题 我有一些单元测试 使用内置的 Visual Studio 2010 Professional 测试功能 它们使用方法所需的存根 我创建了一个存根 并为几个属
  • 嵌套字典到嵌套转发器 asp.net c#

    我正在制作一个 asp page 它将显示有关公司资产的分层信息 为了获取数据 我使用了 lambda 表达式 FASAssetInfoDataContext fasInfo new FASAssetInfoDataContext var
  • Imagemagick仅使用一个核心

    我正在运行一个 8 核的 Ubuntu 服务器 然而 imagemagick 始终只使用 1 个单核 跑步identify version返回 Version ImageMagick 6 6 9 7 2012 08 17 Q16 http
  • 从 OWL 本体到 Neo4j 图形数据库的映射

    我正在与 OWL 合作 创建了一个非常大的本体 我使用曼彻斯特大学开发的OWL API http owlapi sourceforge net 问题是 只有使用 OWL API 本体才会加载到内存中 有两种有价值的解决方案可以将数据从本体传
  • 滚动视图没有完全向下滚动

    我正在构建一个类似聊天的应用程序 它使用滚动视图在屏幕上显示用户输入的文本 我正在做的是随着更多文本附加到屏幕上 自动向下滚动滚动视图 我在用着 ScrollView my scrollview ScrollView findViewByI
  • Android自定义按钮,里面有imageview和textview?

    我正在寻找创建一个自定义按钮 理想情况下 该按钮左侧有一个图像 右侧有一个文本视图 我将如何实现这个目标 最快的方法 创建可点击的视图 其中包含 ImageView 和 TextView 并以可绘制按钮作为背景
  • MSVC - 停止标题中的警告

    我正在将 MSVC 与 CMaked 项目一起使用 因此 我在 MSVC 上启用了许多为 gcc 和 clang 启用的标志 然而 Wall 警告级别让我有些痛苦 它警告我包含头文件中的各种内容 例如 stdio h 和 boost 头文件
  • jquery - 检测div的底部是否接触浏览器窗口的底部?

    给定页面上的 div 如何检测div何时滚动到浏览器窗口底部的位置 与浏览器窗口底部齐平 我认为上面的答案不起作用 因为 offset top 是 div 和文档顶部之间的空间 并且不是可变的 这对我有用 var a mydiv offse
  • matplotlib:使图例键成为方形

    我正在使用 matplotlib 并且希望在制作条形图时将图例中的键更改为正方形而不是矩形 有没有办法指定这一点 我现在拥有的 我想要的是 Thanks 如果您想要一个非常快速和肮脏的解决方案来获得近似平方 可能需要根据您的绘图进行一些微调
  • 如何在Java中执行无符号到有符号的转换?

    假设我从输入设备读取了这些字节 6F D4 06 40 该数字是毫弧秒格式的经度读数 最高位 0x80000000 基本上始终为零 并且在本问题中被忽略 我可以轻松地将字节转换为unsigned整数 1876166208 但是如何将该无符号