CS50 BULBS如何将printF的0和1转换成一个变量,并放入printbulb函数中?

bprjcwpo  于 2023-04-19  发布在  其他
关注(0)|答案(1)|浏览(195)

当我执行我的程序时,它会打印出你输入的字符串中的每个字符的二进制值,我怎么才能得到一个变量中的0和1的集合,我可以在我的void print_bulb中使用它呢(int bit)函数。我只是使用了一个forloop来检查asci值/的剩余部分2打印0表示没有提醒,1表示有提醒,然后除以2,再次检查提醒,一直到我的asci值为0。

#include <cs50.h>
#include <stdio.h>
#include <string.h>

const int BITS_IN_BYTE = 8;

void print_bulb(int bit);

int main(void)
{
    // TODO

    string l = get_string("enter a string\n");
    int a = strlen(l);

    for (int i =0; i < a; i++)
    {
        int c = l[i];

        for(int j = 0; j<8; j++)
            if ( c % 2== 0)
            {
                printf("0\n");
                int b = c / 2;
                c=b;
            }
            else if(c % 2 ==1)
            {
                printf("1\n");
                int b = c / 2;
                c=b;
            }
    }
}

void print_bulb(int bit)
{
    if (bit == 0)
    {
        // Dark emoji
        printf("\U000026AB");
    }
    else if (bit == 1)
    {
        // Light emoji
        printf("\U0001F7E1");
    }
}
aurhwmvo

aurhwmvo1#

由于您打印的值与您要比较的值相同,因此只需打印c % 2的值。

for (int j = 0; j < 8; j++) {
    print_bulb(c % 2);
    c /= 2;
}

要从左到右打印位,可以使用位移位代替重复除法。当使用按位操作时,应该使用无符号值。

for (int i =0; i < a; i++)
    {
        unsigned char c = l[i];

        for (int j = 7; j >= 0; j--) {
            print_bulb((c >> j) % 2);
        }
    }

相关问题