java - parseUnsignedInt - 这个方法有什么问题?
问题描述
我的脑子要炸了...... java怎么了?
我看到不仅我有误解,所以也许有人会告诉我这个实现的逻辑在哪里。
所以我们有这个代码
String s = Integer.toBinaryString(-5);
System.out.println(s);
int i = Integer.parseInt(s, 2);
System.out.println(i);
当然我们会遇到异常,因为 parseInt 试图将 1111111111111111111111111111011 解析为 4 294 967 291,当然这超出了范围。但是,为什么parseUnsignedInt解析 11111111111111111111111111111011 到 -5 ???逻辑在哪里?这是未签名的!首先,我希望这个方法会返回 unsigned Int (我知道 java 没有它),但是好吧,让我们试着想象一下parseUnsignedInt它不是关于返回值,而是关于参数,但又一次!如果这是无符号的,那么 11111111111111111111111111111011 应该是正值,而不是-5。请告诉我,有什么意义?因为对我来说,Sun\Oracle 似乎在欺骗开发人员。
PS我只是尝试在C#中重复这个实验
string s = Convert.ToString(-5, 2);
Console.WriteLine(s);
int i = Convert.ToInt32(s,2);
Console.WriteLine(i);
没问题。我 = -5!正如我所料。还有 Convert.ToUInt32(s,2) 将返回给我 4 294 967 291
更新:伙计们,也许你不理解我。我不是在寻找解决方案。我只是混淆了java核心方法包含“无符号”字但与它无关。当您使用parseUnsignedInt时,您希望该方法会返回无符号数。但是 -5 != 无符号数。
解决方案
Integer.toBinaryString 转换为二进制补码格式。如果您想获得二进制数字,请使用 Integer.toString( -5, 2) 。但它将由“-”而不是“1”引导。
推荐阅读
- clips - CLIPS 使用变量作为实例的名称
- javascript - Web Scraping 以获取链接并根据 JavaScript 页面列表中的选择返回文件
- css - 为什么我的自定义 CSS 转换在更新父 React 组件的状态时不起作用?
- java - 运行 javafx 程序时出现“InvocationTargetException Caused by: java.lang.RuntimeException: Exception in Application start method”
- python - Python 在导出环境变量时抛出 KeyError
- python - 无法使用 pyqt 线程为 cv2.VideoCapture() 获取视频路径输入
- react-native - 从 JSON 获取数据时无法对未安装的组件执行 React 状态更新
- python - 赋值前引用的局部变量“body” - Python - build_table
- android-studio - 如何在android studio中组织flutter应用程序?
- react-native - 如何在 React Native 中将数组分配为对象的属性?