繁体   English   中英

java Arrays.binarySearch 给出错误答案,但按位补码给出正确答案

[英]java Arrays.binarySearch gives wrong answer, but bitwise complement gives the right answer

GeeksForGeeks.com 在 Java 中有一系列有趣和酷炫的技巧,其中一个让我很困惑。 它给出了正确的答案,我只是不知道为什么。

  import java.util.Arrays; 

        public class GFG { 
            public static void main(String[] args) 
            { 
                int[] arr = new int[] { 1, 3, 4, 5, 6 }; 

                // 2 has to be inserted 
                int pos = Arrays.binarySearch(arr, 2); 
                System.out.print("Element has to be inserted at: "
                                                          + ~pos); 
            } 
        } 

所以它会正确地说位置是1,因为pos = -2,然后在取位补码后,~pos = 1,这是正确的位置。 但我想知道,为什么它一开始没有返回 1 ? 更神秘的是,为什么取按位补码后是正确的? 这是 GFG 文章的原始链接: https://www.geeksforgeeks.org/interesting-and-cool-tricks-in-java/

非常感谢 Java 大师的任何建议!
汉克

您应该阅读文档

返回: 搜索键的索引,如果它包含在数组中; 否则, (-(insertion point) - 1) 插入点定义为将键插入数组的点:第一个元素的索引大于键,或者如果数组中的所有元素都小于指定的键,则为 a.length。

这意味着,由于 Java 使用二进制补码来表示数字的负数,如果您将返回数字的位取反,您将获得正确的插入点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM