为什么 Integer.MIN_VALUE 的绝对值等于 Integer.MIN_VALUE

2023-11-26

在java中当我说Integer i = Math.abs(Integer.MIN_VALUE)。我得到与答案相同的值,这意味着i包含Integer.MIN_VALUE。 我也在 C++ 中验证了同样的情况。

为什么会有这种行为?


阅读 Joshua Bloch 撰写的《Effective Java》中的这篇文章。

我找到了这个问题的答案,解释如下: 计算机使用二进制算术,逻辑Math.abs在java或absolute任何语言的函数如下:

if(num >= 0)
    return num;
else
    return (2's complement of the num);

注意:如何求2的补码

对于给定的数字,我们先求它的补码,然后加1。例如 考虑我们的数量是101011的补码=010102的补码=01011(在 1 的补码上加 1)

现在,为了简单明了起见,我们假设我们的整数(有符号)大小是 3 位,那么这里是可以使用这四位生成的可能的数字列表:

000 --> 0 (0)
001 --> 1 (1)
010 --> 2 (2)
011 --> 3 (3) 
100 --> 4 (-4)
101 --> 5 (-3)
110 --> 6 (-2)
111 --> 7 (-1)

既然是有符号的,就意味着一半数是负数,另一半是正数(负数是第一位为1的数)。让我们从000并尝试找到它的负数,它将是000.

2's complement of `000` = 1 + `111` = `000`
2's complement of `001` = 1 + `110` = `111`
2's complement of `010` = 1 + `101` = `110`
2's complement of `011` = 1 + `100` = `101`
2's complement of `100` = 1 + `011` = `100`
2's complement of `101` = 1 + `010` = `011`
2's complement of `110` = 1 + `001` = `010`  
2's complement of `111` = 1 + `000` = `001`

从上面的演示我们发现2的补码111(-1) is 001(1),类似地 2 的补码110(-2) is 010(2), 2 的补码101(-3) is 011(3)和 2 的补码100(-4) is 100(-4)正如我们所看到的,-4 是使用 3 位可能的最小负数。

这就是为什么绝对的原因Integer.MIN_VALUE is Integer.MIN_VALUE.

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

为什么 Integer.MIN_VALUE 的绝对值等于 Integer.MIN_VALUE 的相关文章

随机推荐

  • JVM 内存:为什么任务管理器上的内存与 JProbe(或 JConsole 工具)不同

    我面临的问题是我的应用程序使用的内存只有100MB 之后减少了50MB 但在窗口任务管理器上它显示150MB并且总是保持或增加但不减少 我们如何减少任务管理器上的内存 私人工作集 你所看到的JConsole 或其他监控工具 是java内存正
  • 为什么我似乎无法强制 Oracle 11g 为单个 SQL 查询消耗更多 CPU

    我有一些在巨大的表上运行的巨大查询 这些查询似乎存在 CPU 瓶颈 并且运行了数小时 据我所知 Oracle 在 11g 第 2 版中有很多新功能 可以在内部并行化查询的执行 然而 无论我在查询中添加何种提示 我似乎都无法在数据库框中使用超
  • 使用 python 从网页中提取所有链接

    在 Udacity 的计算机科学简介课程之后 我正在尝试制作一个 python 脚本来从页面中提取链接 下面是我使用的代码 我收到以下错误 NameError 名称 页面 未定义 这是代码 def get page page try imp
  • dicts 在 python 3 中不可排序?

    为什么字典在 python2 中是可排序的 但在 python3 中却不能 我在文档中找不到它 Python 3 3 4 default Feb 11 2014 16 14 21 gt gt gt sorted a a b b Traceb
  • mysqli 中的位标志使用 fetch_field_direct 意味着什么

    使用 mysqli 我可以获取有关字段的信息 如下所示 field mysqli fetch field direct result fieldCount 我可以使用从结果中获取字段标志 field gt flags PHP 手册说这会返回
  • ASP.NET MVC 2 RC 客户端验证不起作用

    我似乎无法在 MVC 2 RC 应用程序上进行任何客户端验证 我的模型有以下内容 public class ExampleModel Required ErrorMessage Test1 is required DisplayName T
  • 设置 Gradle 以在 Android Studio 中运行 Java 可执行文件

    所以事情是这样的 我使用的是 Android 版 ORMLite 它使用注释来在 Android 中进行映射 如您所知 Android 中的注释速度很慢 ORMLite 的开发者已经意识到这一点 因此他们添加了运行 java 可执行文件来生
  • 如何检查一个对象是列表还是元组(但不是字符串)?

    这是我通常所做的 以确定输入是list tuple 但不是str 因为很多次我偶然发现函数传递一个错误str错误地对象 并且目标函数确实for x in lst假如说lst实际上是一个list or tuple assert isinsta
  • Flutter Stack 更改深度

    我有一个带有 3 个定位小部件的堆栈 并且作为一个孩子有一个 GestureDetector 我可以拖动它们 但我也想在您单击它时将单击的那个带到前面 我尝试在父窗口小部件中调用更改状态 但这也交换了受影响的窗口小部件的位置 这是完整的示例
  • 将 jquery 对象链接/取消链接到元素

    我正在使用 jquery flowplayer 工具插件http flowplayer org tools tooltip html 1 我希望在用户单击某个元素时创建一个工具提示 2 当用户点击另一个元素时 旧的工具提示必须取消链接 删除
  • JavaScript 的简单(非安全)哈希函数? [复制]

    这个问题在这里已经有答案了 可能的重复 从 Javascript jQuery 中的字符串生成哈希 谁能建议一个用 浏览器兼容 JavaScript 编写的简单 即数十行代码 而不是数百行 哈希函数 理想情况下 我想要的东西是 当传递一个字
  • 用c#获取每个资源管理器窗口的路径

    我对 C 很陌生 我很无聊 有时我关闭一个窗口 几秒钟后我注意到我再次需要该窗口 并且重新打开 Windows 资源管理器并导航到该特定路径让我感到非常沮丧 所以我想创建一个小应用程序 允许我存储最后关闭的窗口的列表 使用快捷键可以一一恢复
  • MySQL 返回连接表的第一行

    我有两个表 国家和鸭子 其中国家 地区表包含世界上的每个国家 地区 鸭子表包含鸭子列表 其中包含用于链接到主要国家 地区的 Country id 字段 我正在尝试获取仅包含至少一只鸭子的国家 地区的列表 并从鸭子表中获取该国家 地区评价最高
  • Android - 单击一项后保持 ListView 的项目突出显示

    所以我有一个活动 2ListView小部件 当您在第一个小部件中选择一个值时 第二个小部件将填充与第一个小部件中的选择相关的值ListView 这个机制工作没有问题 但现在我希望用户选择保持突出显示 我已经阅读了大量与该主题相关的问题 似乎
  • 通用扩展和实现

    我不明白为什么Company编译 我以为它检查了extends但不是为了implements public interface Employee public class HourlyEmployee implements Employee
  • 向 HTML 文本区域添加行号

    我有一个
  • Scrapy中间件订单

    Scrapy 文档 says 首先 中间件是最接近的一个 发动机 最后一个更接近 到下载器 决定分配给哪个订单 你的中间件看到 DOWNLOADER MIDDLEWARES BASE 设置 并根据位置选择一个值 你想插入中间件 这 顺序很重
  • 为什么无法将 XDocument XDeclaration 编码类型设置为 iso-8859-1?

    为什么下面的代码没有设置XML声明编码类型 它始终将编码设置为 utf 16 我错过了一些非常明显的东西吗 var xdoc new XDocument new XDeclaration 1 0 iso 8859 1 null new XE
  • getRight、getLeft、getTop 返回零

    我正在使用以下代码 但所有方法都返回零值 我知道要获取视图的坐标 应该绘制我们的视图 这就是为什么我在 onResume 方法中使用代码但仍然不起作用 任何想法 Override public void onResume super onR
  • 为什么 Integer.MIN_VALUE 的绝对值等于 Integer.MIN_VALUE

    在java中当我说Integer i Math abs Integer MIN VALUE 我得到与答案相同的值 这意味着i包含Integer MIN VALUE 我也在 C 中验证了同样的情况 为什么会有这种行为 阅读 Joshua Bl