int yunsuan2(unsigned int i) //低位補(bǔ)1函數(shù) { unsigned int j=0x00; for(;i>1;i--) {
j=j>>1+0x80;〖位運(yùn)算符的優(yōu)先級比+,-低,這樣很容易看出錯誤的地方了〗
} return i=j; } /******************************************************/ int yunsuan1(unsigned int i) //高位補(bǔ)1函數(shù) { unsigned int j=0x00; for(;i>1;i--) { j=j<<1+0x01;〖位運(yùn)算符的優(yōu)先級比+,-低,這樣很容易看出錯誤的地方了〗
} return i=j;
}
void main(void) { unsigned int j=0; unsigned int i; while(1) {
P0=0xff;
for(j=1;j<=4;j++) { i=j; P0=(P0<<(j)+yunsuan1(i));//P0左移j個位,低位補(bǔ)1〖位運(yùn)算符的優(yōu)先級比+,-低,這樣很容易看出錯誤的地方了〗 Delay(500); P0=(P0>>(j)+yunsuan2(i));//p0右移j個位,高位補(bǔ)1〖位運(yùn)算符的優(yōu)先級比+,-低,這樣很容易看出錯誤的地方了〗
Delay(500); } }
}
程序的目的是要依次得到(0代表亮燈)
1111 1110
0111 1111
1111 1101
1011 1111
1111 1011
1101 1111
1111 0111
1110 1111
但下載到單片機(jī)里后出現(xiàn)燈亮的順序是這樣的
1111 1110
0111 1111
1111 1100
0011 1111
1111 1000
0001 1111
1111 0000
0000 1111
為什么會這樣!!??
原來是運(yùn)算符的優(yōu)先級搞錯了。
給一起學(xué)習(xí)的同學(xué)做個反面榜樣吧。
[此貼子已經(jīng)被作者于2009-11-5 18:44:52編輯過]
|