标签:
杂谈 |
分类: AVR单片机 |
下面是一段简略的程序:
char a0;
signed char a1;
signed int
a2; signed long a3;
LCD_CLS();
a0 = -16;
a0 >>= 2;
LCD_DispHex(8,0,a0,0,0);
a0 = 16;
a0 >>= 2;
LCD_DispHex(64,0,a0,0,0);
a1 = -16;
a1 >>= 2;
LCD_DispHex(8,8,a1,0,0);
a1 = 16;
a1 >>= 2;
LCD_DispHex(64,8,a1,0,0);
a2 = -16;
a2 >>= 2;
LCD_DispHexInt(8,16,a2,0,0);
a2 = 16;
a2 >>= 2;
LCD_DispHexInt(64,16,a2,0,0);
a3 = -16;
a3 >>= 2;
LCD_DispHexLong(8,24,a3,0,0);
a3 = 16;
a3 >>= 2;
LCD_DispHexLong(64,24,a3,0,0);
履行成果是:
3C
04 FC
04 FFFC
0004 FFFFFFFC 00000004
这让我很疑惑,为什么a0界说为char,a1界说为signed char,它们的运算成果就不同了呢?一般情况下char型和signed char型、int型和signed int、long和signed long是完全一致的。
经查看,本来CodeVisionAVR的工程装备中有一个小的设置,如右图红框勾出。
假如此设置打勾选中,依据相关协助,那么该工程中char型变量界说等同于unsigned char。这和一般意义上的认知是不同的。
所以,日后在软件中尽量用signed char或unsigned char来清晰界说变量类型,以免一不小心工程装备弄错了而带来不必要的费事。