CodeVisionAVR中的一個(gè)配置
標(biāo)簽:雜談 | 分類: AVR單片機(jī) |
下面是一段簡(jiǎn)單的程序:
本文引用地址:http://m.butianyuan.cn/article/201611/323040.htmchar 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);
執(zhí)行結(jié)果是:
3C
04 FC
04 FFFC
0004 FFFFFFFC 00000004
這讓我很納悶,為什么a0定義為char,a1定義為signed char,它們的運(yùn)算結(jié)果就不同了呢?通常情況下char型和signed char型、int型和signed int、long和signed long是完全一致的。
經(jīng)檢查,原來(lái)CodeVisionAVR的工程配置中有一個(gè)小的設(shè)置,如右圖紅框勾出。
如果此設(shè)置打勾選中,根據(jù)相關(guān)幫助,那么該工程中char型變量定義等同于unsigned char。這和通常意義上的認(rèn)知是不同的。
所以,日后在軟件中盡量用signed char或unsigned char來(lái)明確定義變量類型,免得一不小心工程配置弄錯(cuò)了而帶來(lái)不必要的麻煩。
評(píng)論