在单片机运算中。一般只能处理32bit的运算。在有些场合,不得不处理64bit的运算的时候。
发现编译器也是支持的。编译器应该是通过软件实现的。
设想一种场合,要对一个32bit的数进行乘以0xffffffff的操作。
方式1: //先定义一个 numTmp_64bit numTmp_64bit = numA_32bit*0xff; numTmp_64bit *= 0xffffff; 方式2: //先定义一个 numTmp_64bit numTmp_64bit = numA_32bit*0xffff; numTmp_64bit *= 0xffff; 方式3: //先定义一个 numTmp_64bit numTmp_64bit = numA_32bit*0xffffff; numTmp_64bit *= 0xff; 方式4: //先定义一个 numTmp_64bit numTmp_64bit = numA_32bit; numTmp_64bit *= 0xffffffff;
通过实测发现,方式1、方式2和方式3均存在不同程度的错误,准确度丢失等问题。
只有方式4正常,是一种对运算过程中出现的莫名其妙的错误的一种规避手段。以上讨论对于有符号无符号均适用。
测试环境:32bit的powerpc单片机,编译器为gcc或者dcc。