簡體   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