M BUZZ CRAZE NEWS
// news

Converting 16-bit integer to 8-bit integer?

By Emma Johnson
$\begingroup$

I found a question that asks for a method to copy a 16-bit sign and magnitude integer to an 8-bit sign and magnitude integer. Is that even possible? Could someone please explain how to do this?

$\endgroup$ 0

2 Answers

$\begingroup$

Clearly this is impossible in general, as explained by @mixedmath. However, it's quite reasonable to convert 16 bit values that 'fit' into 8 bits, eg 1, -34, 127, etc.

The way to do this may be less than obvious if by 'sign and magnitude' you mean 2's complement (Wikipedia). For example:

  • 1 (decimal) = 0001 (16 bit hex) = 01 (8 bit hex)
  • 127 = 008F = 8F
  • -1 = FFFF = FF
  • -128 = FF80 = 80 (This one always surprises me...)

So the conversion method is easy - simply truncate to the bits you need. Such useful properties of 2's complement are why it is used.

$\endgroup$ 1 $\begingroup$

An 8-bit integer where the first bit is reserved for sign can encode up to $2^7$ different objects. We would assume that we would encode all the integers from 0 to 127 with them. More importantly, if we chose say 500 different integers, one cannot encode all of them with 8 bits and preserve all the information.

With 15 bits, one can encode up to $2^{15}$ different things.

Instead of belaboring that, consider instead the alternative: one can store 16 bit integers into 8 bit integers. So take the maximum value storeable in a 16 bit integer and 'condense' it into an 8 bit integer. If we then take the 8 bit integer to be the latter half of a 16 bit integer, we can count higher until we hit a limit - another 'maximum storeable value' in a 16 bit integer. Clearly, these two 'maximum storeable values' must be equal!

$\endgroup$

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy