Question

1) I understand that when you're converting binary to decimal the left most bit represents 0, 1...so on. So for example to convert 0001 to decimal it is 0*2^0+0*2^1+0*2^2+1*2^3 so the decimal value would be 8.

2) When for example you have signed hex 0x80 which will be converted to binary 1000 0000 however in order to compute the decimal value for this binary representation it is signed so we have to invert 7 bits so we get 1111111 and add 1 which gives us 10000000 which is -128.

My question is why in the second case when we're computing the decimal for the signed byte we had to start from right most bits as 0 so we have ....+1*2^8. Why isn't the 2^0 the left most bit as we computed in 1) for the second case?

Thanks.

Was it helpful?

Solution

I answer to point 1, not quite. 0001 is actually 1 while 1000 is 8. You appear to be coming from the wrong end. The binary number 1101, for example would be:

+------ 1 * 2^3     =  8
|+----- 1 * 2^2     =  4
||+---- 0 * 2^1     =  0
|||+--- 1 * 2^0     =  1
||||                  --
1101                = 13

For point 2, the easiest way to turn a bit pattern into a signed number is to first turn it into an unsigned value (0x80 = 128), then subtract the bias (256 for eight bits, 65536 for 16 bits and so on) to get -128.

The bias should only affect the calculation at the end of the process, it's a way to map the range 0..255 to -128..127, or 0..65535 to -32768..32767.

OTHER TIPS

No, usually binary is stated the other way...0001 is 1, 1000 is 8.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top