作者hylkevin (Kevin)
看板C_and_CPP
標題Re: [問題] 二進制的累加!
時間Mon Mar 16 01:25:10 2009
※ 引述《apol1033 (Frog )》之銘言:
: 太久沒看C++忘記如何用指令了= ="
: 是用C++來控制8051單晶片
: 想問一下如果想輸出一個訊號來控制8個LED
: 他的變化是
: 00000001
: 00000011
: 00000111
: 00001111
: 00011111
: 00111111
: 01111111
: 11111111
: 01111111
: 00111111
: 00011111
: 00000111
: 00000011=>這邊再跑回最上面
: 原本是想用二進制然後慢慢加,不過中間的差距不同所以不行用
: 也想過用陣列,不過也搞不懂怎麼使用
: 希望有人能幫解惑一下
unsigned char led_sig=1;
bool right2left=true;
while(loop)
{
if(right2left)
{
led_sig<<=1;
++led_sig;
if(led_sig==0xff)
right2left=false;
}
else
{
led_sig>>=1;
if(led_sig==1)
right2left=true;
}
}
我可能會這樣寫
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.136.177.115
※ 編輯: hylkevin 來自: 220.136.177.115 (03/16 01:25)
※ 編輯: hylkevin 來自: 220.136.177.115 (03/16 01:25)
1F:推 apol1033:想問一下bool right2left=true;是代表什麼?因為沒學過 03/16 01:32
2F:→ apol1033:bool的指令... 03/16 01:33
3F:推 apol1033:還有if(right2left)裡面的判斷好像沒有寫條件進去 03/16 01:36
4F:→ apol1033:有點了解怎麼運作,事先宣告訊號為1而已,然後宣告一個左 03/16 01:49
5F:→ apol1033:右位移的判斷碼,先執行左移,訊號內容向左移一位元然後 03/16 01:50
6F:→ apol1033:加1,重複至訊號為0xff停止左移開始執行右移動作,不過裡 03/16 01:52
7F:→ apol1033:面細節的一些控制符號有些沒看過就是了= =" 03/16 01:52
8F:→ hylkevin:if可以評估變數值 0為false 非0為true 03/16 02:21
9F:→ hylkevin:bool是C++才有的預設型別 只有true和false兩種值 03/16 02:22
10F:→ hylkevin:loop是你自己控制要不要繼續的旗標 03/16 02:23
11F:→ hylkevin:led_sig用unsigned因為負值的右移有些編譯器會補1在前 03/16 02:26