作者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