[JGIT] Questions about binary right shifting
- From
Yann Simon <yann.simon.fr@gmail.com>
- Date
- Feb 5, 2009, 14:37 UTC
- Message-ID
- <498AF9B1.1060200@gmail.com>
Hi,
I can see in the code that the signed right shifting is used. Could it be a problem? Or do we manipulate only positive numbers?
diff --git a/org.spearce.jgit/src/org/spearce/jgit/dircache/DirCache.java b/org.spearce.jgit/src/org/spearce/jgit/dircache/DirCache.java index 8eb4022..d70eca0 100644 --- a/org.spearce.jgit/src/org/spearce/jgit/dircache/DirCache.java +++ b/org.spearce.jgit/src/org/spearce/jgit/dircache/DirCache.java @@ -577,7 +577,7 @@ int findEntry(final byte[] p, final int pLen) { int low = 0; int high = entryCnt; do { - int mid = (low + high) >> 1; + int mid = (low + high) >>> 1; final int cmp = cmp(p, pLen, sortedEntries[mid]); if (cmp < 0) high = mid; And could we used right shifting to optimize a division per 2? diff --git a/org.spearce.jgit/src/org/spearce/jgit/lib/Tree.java b/org.spearce.jgit/src/org/spearce/jgit/lib/Tree.java index 0ecd04d..ff9e666 100644 --- a/org.spearce.jgit/src/org/spearce/jgit/lib/Tree.java +++ b/org.spearce.jgit/src/org/spearce/jgit/lib/Tree.java @@ -136,7 +136,7 @@ private static final int binarySearch(final TreeEntry[] entries, int high = entries.length; int low = 0; do { - final int mid = (low + high) / 2; + final int mid = (low + high) >>> 1; final int cmp = compareNames(entries[mid].getNameUTF8(), nameUTF8, nameStart, nameEnd, TreeEntry.lastChar(entries[mid]), nameUTF8last); if (cmp < 0) Yann