zoukankan      html  css  js  c++  java
  • 单片机为32bit时运算中64bit运算中遇到的bug及其规避手段

    在单片机运算中。一般只能处理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。

  • 相关阅读:
    经典SQL语句集锦(收藏版)
    硬件访问服务学习笔记_WDS
    Android 工具视频学习笔记_WDS
    Android资源收集
    Android USB gadget configfs学习笔记总结
    IP、端口号、MAC
    Java中的泛型
    git配置config文件
    Java基础知识总结
    Java中的继承抽象类和接口
  • 原文地址:https://www.cnblogs.com/praiseslow/p/10979866.html
Copyright © 2011-2022 走看看