<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>8-bit MicrocontrollersのトピックRe: long multiplication issues</title>
    <link>https://community.nxp.com/t5/8-bit-Microcontrollers/long-multiplication-issues/m-p/238997#M19554</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello Thomas,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Try the following -&lt;/P&gt;&lt;P&gt; temp = (valor * 254UL);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;This should cause the result of the multiplication to be 32-bit, rather than 16-bit.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;Mac&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Tue, 25 Jun 2013 19:08:22 GMT</pubDate>
    <dc:creator>bigmac</dc:creator>
    <dc:date>2013-06-25T19:08:22Z</dc:date>
    <item>
      <title>long multiplication issues</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/long-multiplication-issues/m-p/238996#M19553</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I am currently working on a MC9S08SH8 with CodeWarrior IDE 5.9.0( build 5292 ) to design an interface between 2 sub-systems. One collects data, and the other sends them. My program is to read the data received, convert them into SI units (meters, Pascals ... ) and store them in a 32 bytes vector in order to send data through RS-232 serial port.&lt;/P&gt;&lt;P&gt;Problem is, during the conversion phase, some multiplications are done wrong :&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;This one works perfectly :&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned short valor = 30000;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned short resultado;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned long temp;&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; temp = (valor*33782);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; auxiliar_1 = temp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // = 1.013.460.000&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; resultado = temp;&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN class="mce_paste_marker"&gt;But this one does not :&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN class="mce_paste_marker"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN class="mce_paste_marker"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;unsigned short valor = 300;&lt;SPAN class="mce_paste_marker"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN class="mce_paste_marker"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned short resultado;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned long temp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; temp = (valor*254);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; auxiliar_2 = temp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // = 10.664 instead of 76.200 !&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; resultado = temp;&lt;/P&gt;&lt;P&gt;&lt;SPAN class="mce_paste_marker"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN class="mce_paste_marker"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN class="mce_paste_marker"&gt;I have noticed that 76.200d is 1 00101001 10101000b in binary, &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN class="mce_paste_marker"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class="mce_paste_marker"&gt;and&lt;/SPAN&gt;&lt;SPAN class="mce_paste_marker"&gt; 10.664d is 0 &lt;/SPAN&gt;&lt;SPAN class="mce_paste_marker"&gt;00101001 10101000b.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN class="mce_paste_marker"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN class="mce_paste_marker"&gt;So it seems that even though temp is a long type(4 bytes), in the second example, it is truncated to short type(2bytes), but not in the first ...&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN class="mce_paste_marker"&gt;Any idea why this happens ? Syntaxis and call situation are identical. I tried replacing the "254" in the second example by "33782" and it worked. How could it be related to the number ?&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN class="mce_paste_marker"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN class="mce_paste_marker"&gt;Thanks in advance, &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN class="mce_paste_marker"&gt;Thomas&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN class="mce_paste_marker"&gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN class="mce_paste_marker"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 25 Jun 2013 18:41:24 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/long-multiplication-issues/m-p/238996#M19553</guid>
      <dc:creator>thomasj</dc:creator>
      <dc:date>2013-06-25T18:41:24Z</dc:date>
    </item>
    <item>
      <title>Re: long multiplication issues</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/long-multiplication-issues/m-p/238997#M19554</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello Thomas,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Try the following -&lt;/P&gt;&lt;P&gt; temp = (valor * 254UL);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;This should cause the result of the multiplication to be 32-bit, rather than 16-bit.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;Mac&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 25 Jun 2013 19:08:22 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/long-multiplication-issues/m-p/238997#M19554</guid>
      <dc:creator>bigmac</dc:creator>
      <dc:date>2013-06-25T19:08:22Z</dc:date>
    </item>
    <item>
      <title>Re: long multiplication issues</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/long-multiplication-issues/m-p/238998#M19555</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thank you very much !&lt;/P&gt;&lt;P&gt;I had tried with a cast on my own shortly after posting that(ocurred like this :smileysilly:) and it worked as well.&lt;/P&gt;&lt;P&gt;Your way is "cleaner" than a cast on "valor", that's probably what I'll use.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Again, thanks, problem solved&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thomas&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 25 Jun 2013 19:26:37 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/long-multiplication-issues/m-p/238998#M19555</guid>
      <dc:creator>thomasj</dc:creator>
      <dc:date>2013-06-25T19:26:37Z</dc:date>
    </item>
  </channel>
</rss>

