On Tue, Mar 23, 2010 at 8:19 PM, Raph <mart...@gmail.com> wrote: > (My opinion, anyway.I think a byte should be 8 bits and I should be able to > use all of them.)
Er, it is, and you can. A Java byte still gives you all 8 bits' worth of 256 different possible values; the interpretation of those values is all that differs here. Whereas C lets you pick between signed and unsigned (with the default unfortunately not always well-defined), Java gives you no choice but to use the signed interpretation. But you still get to use all 8 bits of the byte; it's just that the numbers mapped to [128, 255] in unsigned interpretations map to [-128,-1] instead. The dissonance here comes from the fact that there's no real tradition of negative hexadecimal numbers in programming. We've typically used the hexadecimal form of the unsigned integer interpretation to represent the corresponding bit patterns no matter how they're being used in a given program or context. So anyone experienced with manipulating things at the bit level comes in expecting things like (byte 0xff) to just work, and is surprised when they don't. Still, the nice thing about Clojure vs Java is it's not hard to write a fix: (defmacro unsigned-byte [bval] (byte (if (> bval 127) (- bval 256) bval))) Or call it (ubyte) for less wordiness... -- Mark J. Reed <markjr...@gmail.com> -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en To unsubscribe from this group, send email to clojure+unsubscribegooglegroups.com or reply to this email with the words "REMOVE ME" as the subject.