码迷,mamicode.com
首页 > 其他好文 > 详细

STM32 MDK C 常见易错点

时间:2020-01-06 14:20:35      阅读:81      评论:0      收藏:0      [点我收藏+]

标签:常见   style   sig   int   byte   bsp   char   类型转换   而不是   

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

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

char varbyte = -5;
if(varbyte > -2) printf("varbyte > -2 \r\n");
else printf("varbyte < -2 \r\n");

输出结果: 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 \r\n");
else printf("varbyte < -2 \r\n");

输出结果: varbyte < -2
 
2、运算优先级,左移<<,右移>> 是低于 +,-,*,/
unsigned char result = 2<<3+2;
// result = 32 而不是10
//+优先于<<,计算的是 2<<(3+2) = 2的5次方是32

 

 
 
 

STM32 MDK C 常见易错点

标签:常见   style   sig   int   byte   bsp   char   类型转换   而不是   

原文地址:https://www.cnblogs.com/qinlongqiang/p/12155972.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!