title: Fixed Point Multiplication of Unsigned numbers
body: <p>I am trying to solve a multiplication problem with fixed point numbers. The numbers are 32 bit. My architecture is 8 bit. So here goes:</p>
  
  <ol>
  <li><p>I am using 8.8 notation i.e., 8 for integer, 8 for fraction.</p></li>
  <li><p>I have A78 which is 10.468. I take its two's complement, and the answer is FFFFF588, which I truncate to 16 bits as F588 and store it. Reason being, I only want to multiply two, 2 byte numbers.</p></li>
  <li><p>Now when I multiply this F588 (negative 10.42 or 0x0A78) with 0xFF4B which is the two's compliment of 0x00B5 (0.707), answer should be 0x0766. Or something like it.</p></li>
  </ol>
  
  <p>What I get on the other hand is 66D8.</p>
  
  <p>Now here is where it gets interesting: If I store negative of B5 in two's compliment in 32 bits, I get 0xFF5266D8 which I shift right by 8 bits, truncate then to 16 bits, and answer is 0x5266.</p>
  
  <p>On the other hand if I instead store my negative 10.42 in 32 bits, I get 0xF58F66D8, which after shifting 8 bits and truncating  becomes 8F66.</p>
  
  <p>But, if I store both numbers in 32 bit formats, only then I get the correct result after shifting and truncation, which is 0x0766. </p>
  
  <p>Why is this happening? I understand that loss of information is intrinsic when we go from 32 to 16 bits, but 0x07 is much different from 0x55. I will be absolutely grateful for a response.</p>