October 17, 2009

Sign language

I have been assigned the painful job of taking interview for my team in company. Why is it painful? Because i am the junior interviewer in the panel and I have to put through the bullshit that the senior interviewer gives to the candidate.... Anyway, this post is just about a couple of things i found people where not aware of !!

Signed arithmetic in C?
First thing we should know that most C compilers and µC's use 2's complement method to do signed arithmetic. If you are wondering hey that is the only way....Wait!! Another way of representation is by using the first bit for sign and rest of the data.
Which means
-5 = 0x1101
-7 = 0x1111
This representation is good and simple. However, it was not so good for the chip manufacturers who had a problem with zero.
0 = 0x0000 or 0 = 0x1000. Which meant that on the number line the same number could be represented by two symbols.
This problem was solved by introduction of the 2's complement. Which is nothing but 1's complement + 1.
which means
-5 = 0x1011
-7 = 0x1001 and 0 = 0x0000.
There was no concept of negative zero. This effectively ensured that for n bits one could represent 2^(n) values. So for 4 bits we should have 16 values. 8+tive and 8 negative. However, we have 8 negative -1 to -8 (0x1000). And 7 positive (1-7). Zero is actually neither positive nor negative and takes the middle position (without a sign bit so really it is a positive...what say?).
One question that i sometimes ask is why was 0x1000 not chosen as +8? Technically it is correct!!. There are two problems. 1) we would kill a advantage which we have with 2's complement ( i.e. MSB is 1 if the number is less than zero). 2) I forgot!!...

Anyway, It is necessary that we understand how signed arithmetic works to understand concepts like add through overflow ( used in Targetlink), Usage (or avoiding!!) of saturation blocks ( in Targetlink and RTW). You can do intelligent coding if you understand how the signed numbers are understood by the compiler you are using.

Please leave your comment. You can subscribe to this blog by using the links under "Subscribe" section.


Powered by ScribeFire.