PIC单片机 C编程技巧(20)
发布时间:2021-06-06
发布时间:2021-06-06
} 7、PICC 关于 unsigned 和 signed 的几个关键问题! 、 的几个关键问题! unsigned 是表示一个变量 或常数) (或常数) 是无符号类型。 signed 表 是无符号类型。 示有符号。它们表示数值范围不一样。 示有符号。它们表示数值范围不一样。 PICC 默认所有变量都是 unsigned 类型的,哪怕你用了 类型的, signed 变量。因为有符号运算比无符号运算耗资源, 变量。因为有符号运算比无符号运算耗资源, 运算一般不涉及有符号运算。 而且 MCU 运算一般不涉及有符号运算。在 PICC 后面加上 -SIGNED_CHAR 后缀可以告诉 PICC 把 signed 变量当作有符号处理。 变量当作有符号处理。 默认的无符号运算下看这样的语句 符号运算下看这样的语句: 在 PICC 默认的无符号运算下看这样的语句: char i; for(i=7;i>=0;i--){ ; //中间语句 中间语句 } 代码看上去是没有丁点错误的,但编译后, 这样的 C 代码看上去是没有丁点错误的,但编译后,问题出现 了: movlw 7 movwf i loop //中间语句 中间语句 decf i //只是递减,没有判断语句!!! 只是递减, 只是递减 没有判断语句!!! goto loop 时候,条件还成立,还得循环一次, 原因是当 i 是 0 时候,条件还成立,还得循环一次,直到 i 成