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 <[EMAIL PROTECTED]>
+
+ * 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 <[EMAIL PROTECTED]>
* 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
}
/**