[cp-patches] Other class libraries

Christian Thalinger twisti at complang.tuwien.ac.at
Tue Jul 1 10:56:19 UTC 2008


On Tue, 2008-07-01 at 11:42 +0100, Andrew Haley wrote:
> Hmm, I'm not sure that explanations should be punted to unfree
> documentation.  If the logic is so obscure that it needs a
> reference, then it perhaps should be spelled out.

Here's the patch for Integer.  I have also added a Mauve test.

- twisti

---

Index: ChangeLog
===================================================================
RCS file: /sources/classpath/classpath/ChangeLog,v
retrieving revision 1.9670
diff -u -3 -p -r1.9670 ChangeLog
--- ChangeLog	1 Jul 2008 10:43:47 -0000	1.9670
+++ ChangeLog	1 Jul 2008 10:55:09 -0000
@@ -1,3 +1,9 @@
+2008-07-01  Christian Thalinger  <twisti at complang.tuwien.ac.at>
+
+	* java/lang/Integer.java (signum): Implemented properly as
+	described in Hacker's Delight Section 2-7, plus Andrew Haley's
+	explanation.
+
 2008-07-01  Andrew Haley  <aph at redhat.com>
 
 	* java/lang/Long.java: Comment change only.
Index: java/lang/Integer.java
===================================================================
RCS file: /sources/classpath/classpath/java/lang/Integer.java,v
retrieving revision 1.39
diff -u -3 -p -r1.39 Integer.java
--- java/lang/Integer.java	6 Jun 2008 00:23:50 -0000	1.39
+++ java/lang/Integer.java	1 Jul 2008 10:55:09 -0000
@@ -687,7 +687,14 @@ public final class Integer extends Numbe
    */
   public static int signum(int x)
   {
-    return (x >> 31) - (-x >> 31);
+    return (x >> 31) | (-x >>> 31);
+
+    // The LHS propagates the sign bit through every bit in the word;
+    // if X < 0, every bit is set to 1, else 0.  if X > 0, the RHS
+    // negates x and shifts the resulting 1 in the sign bit to the
+    // LSB, leaving every other bit 0.
+
+    // Hacker's Delight, Section 2-7
   }
 
   /**





More information about the Classpath mailing list