On 04 Jul 2011, at 20:16, Stéphane Ducasse wrote:
I would like to see the two complement representation of numbers.
This is what I do, for reading/writing unsigned or two complement signed integer from/to byte streams. Note that two complement is only defined for a specific number size, 8, 16, 32 bits. unsignedToSigned: integer size: size ^ integer < (2 raisedTo: size - 1) ifTrue: [ integer ] ifFalse: [ (self twoComplement: integer size: size) negated ] signedToUnsigned: integer size: size ^ integer negative ifTrue: [ self twoComplement: integer size: size ] ifFalse: [ integer ] twoComplement: integer size: size | mask | mask := (2 raisedTo: size) - 1. ^ mask bitAnd: ((integer abs bitXor: mask) + 1) These are also very handy in this context (I believe I once submitted that as an issue): integerFromByteArray: bytes | integer | integer := 0. bytes withIndexDo: [ :each :index | integer := integer + (each bitShift: (bytes size - index) * 8) ]. ^ integer and Integer>>#asByteArrayOfSize: Once you have a byte representation, you can render it as bits as well. Sven