iT邦幫忙

0

C語言的問題

問題如下:
有60顆LED分別為
LED1 LED2 LED3 LED4 LED5 LED6 …..LED60

當有一訊號為1時
LED會顯示
LED1亮

當有一訊號為2時
LED會顯示
LED1滅 LED2亮

當有一訊號為3時
LED會顯示
LED1亮LED2亮

當有一訊號為4時
LED會顯示
LED1滅LED2滅LED3亮

當有一訊號為5時
LED會顯示
LED1亮LED2滅LED3亮
...
….
當有一訊號為256時
LED會顯示
LED1亮LED2亮LED3亮 LED4亮…….. LED60亮

如果不用switch來寫的話,請問眾大神這大概,要怎麼用C來寫??
麻煩大大解惑 謝謝^^

唉……二進制耶!……只是反過來了。
不要看成LED1~LED60
而是看成LED0~LED59的二進制如何?
但是你的0x256不可能全部的燈都亮。(何況0x256是16進制)
2的59次方非常大耶!
0x256換成二進制是0b1001010110
在你想要用c寫之前,你可能要先解決其他計概的問題。
fillano iT邦超人 1 級 ‧ 2019-01-03 18:05:05 檢舉
看起來是要跟位元對應,每一個LED代表一個位元。但是這樣的話,2^60可不是0x256。
嗯...了解 謝謝^^
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

5
小碼農米爾
iT邦高手 1 級 ‧ 2019-01-03 21:30:32
最佳解答

如果先不考慮 60 個 LED 的問題,256 可以亮 9 個燈,我想到 2 種做法給您參考。

陣列版本

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    int input = 256;

    int led[9];

    for(int i=0; i<9; i++)
    {
        led[i] = (input & 1 << i) != 0;
    }

    for(int i=0; i<9; i++)
    {
        printf("%d", led[i]);
    }
    printf("\n");

    return 0;
}

測試連結


不能用陣列版本

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    int input = 256;

    int led1, led2, led3, led4, led5, led6, led7, led8, led9;
    
    led1 = (input & 1) != 0;
    led2 = (input & 2) != 0;
    led3 = (input & 4) != 0;
    led4 = (input & 8) != 0;
    led5 = (input & 16) != 0;
    led6 = (input & 32) != 0;
    led7 = (input & 64) != 0;
    led8 = (input & 128) != 0;
    led9 = (input & 256) != 0;

    printf("%d", led1);
    printf("%d", led2);
    printf("%d", led3);
    printf("%d", led4);
    printf("%d", led5);
    printf("%d", led6);
    printf("%d", led7);
    printf("%d", led8);
    printf("%d", led9);
    printf("\n");

    return 0;
}

測試連結

太厲害了 感謝大神~~~~

1
Kevin
iT邦新手 1 級 ‧ 2019-01-03 22:46:07

C++輸出寫法,value為輸入值。

#include <iostream>
int main()
{
    long long value = 4;
    
    long long nowValue = 1;
    for(unsigned int index = 0; index < 60; index++)
    {
        if((nowValue & value) == nowValue)
        {
            std::cout << index + 1 <<"開" << std::endl;
        }
        nowValue <<= 1;
    }

    return 0;
}

這個也不錯 感謝大神~~~~^^

我要發表回答

立即登入回答