zoukankan      html  css  js  c++  java
  • STM32 MDK C 常见易错点

    1、MDK编译器单字节的负数-1,-2,-3... ... 处理:存储,类型转换,位对齐。

    char 定义的变量在运算过程尤其类型转换,逻辑比大少会被当做 unsigned char 处理,这里很容易出错,为了避免这类错误发生,单字节有符号变量最好显式的声明 signed char

    char varbyte = -5;
    if(varbyte > -2) printf("varbyte > -2 
    ");
    else printf("varbyte < -2 
    ");
    
    输出结果: varbyte > -2
    
    //输出结果却是 varbyte > -2,也就是说 -5>-2 这显然是计算出错。
    //因为在运算过程中 常数 -5 是int类型,这时varbyte=-5会先转成int 型的
    //251(256-5=251),再做251 和 -2比大小,251>-2,输出varbyte > -2;
    
    
    //如果显式的声明unsigned char varbyte = -5;结果就是预期值
    //signed char varbyte = -5;会转对齐4字节的 int -5,-5>-2不成立
    
    signed char varbyte = -5;
    if(varbyte > -2) printf("varbyte > -2 
    ");
    else printf("varbyte < -2 
    ");
    
    输出结果: varbyte < -2
     
    2、运算优先级,左移<<,右移>> 是低于 +,-,*,/
    unsigned char result = 2<<3+2;
    // result = 32 而不是10
    //+优先于<<,计算的是 2<<(3+2) = 2的5次方是32
     
     
     
  • 相关阅读:
    排序算法——选择排序
    poj1906
    poj1496
    poj1244
    poj1183
    poj1806
    !!!舒尔茨自律神经训练法
    Google Analytics的能与不能
    乔布斯最伟大的贡献是什么
    冥想呼吸
  • 原文地址:https://www.cnblogs.com/qinlongqiang/p/12155972.html
Copyright © 2011-2022 走看看