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

java Arrays.binarySearch给出了错误的答案,但按位补码给出了正确的答案,java,arrays,Java,Arrays,Geeksforgeks.com提供了一系列有趣而酷的Java技巧,其中一个让我感到迷惑。它给出了正确的答案,我只是不知道为什么 import java.util.Arrays; public class GFG { public static void main(String[] args) { int[] arr = new int[] { 1, 3, 4, 5, 6 };

Geeksforgeks.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文章的原始链接:

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

你应该阅读:

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


这意味着,由于Java使用表示数字的负数,如果对返回的数字的位求反,则可以获得正确的插入点。

您是否阅读了有关它的内容的文档?“为什么它不首先返回1?”这意味着“2在索引1处找到”,不是吗?确实,我刚读了这本精美的手册-问题解决了!对不起,我有点邋遢,不是吗!好吧,现在这很有道理。如果没有正数,它就不能返回正数,因此Java利用这个机会用一个特定的负数对插入位置进行编码。啊,Java,多么漂亮的语言!我不能对她生气太久,对吗?说真的,谢谢你的提示。