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