用c语言打印二进制字符

用c语言打印二进制字符,c,C,出于对自己的热爱,我无法理解这段C代码背后的逻辑 假设,下面应该打印出无符号字符x的二进制表示形式,我们只允许填写空格 void print_binary(unsigned char x) { int b = 128; while (__________________) { if (b <= x) { x -= b; printf("1"); } else prin

出于对自己的热爱,我无法理解这段C代码背后的逻辑

假设,下面应该打印出无符号字符x的二进制表示形式,我们只允许填写空格

void print_binary(unsigned char x) {
    int b = 128;

    while (__________________) {

        if (b <= x) {
            x -= b;
            printf("1");
        } else
            printf("0");

        ______________________;
    }
}
void打印\u二进制(无符号字符x){
int b=128;
而{

如果(b如果我们忽略原始代码,最直观的方法是:

void print_binary (uint8_t x) 
{
  for(uint8_t mask=0x80; mask!=0; mask>>=1)
  {
    if(x & mask)
    {
      printf("1");
    }
    else
    {
      printf("0");
    }
  }
  printf("\n");
}

如果我们忽略原始代码,最直观的方法是:

void print_binary (uint8_t x) 
{
  for(uint8_t mask=0x80; mask!=0; mask>>=1)
  {
    if(x & mask)
    {
      printf("1");
    }
    else
    {
      printf("0");
    }
  }
  printf("\n");
}
void打印\u二进制(无符号字符x){
int b=128;
而(b!=0){
如果(b>1;
}
}
b的二进制表示为
10000000
。通过执行
b>>1
并选中
b
void print\u binary(无符号字符x){
int b=128;
而(b!=0){
如果(b>1;
}
}


b的二进制表示形式是
10000000
。通过执行
b>>1
并检查
b您只需要一个线索:当前位的值总是大于它后面的低有效位的组合。因此,代码尝试在循环的每次迭代中只测试最有效的“1”位。

您只需要一个clue:当前位的值总是大于它后面的低有效位的组合。因此,代码尝试在每次循环迭代中只测试最有效的“1”位。

第二个空格可能是
b/=2
;第一个空格可能是
b!=0
。我请您查看相关字段右/左的列表估计数。并选择。进一步,“但不是一个无符号字符,什么,255字节?”我不知道你的平台,但在我的平台上,一个无符号字符是一个字节。这个问题更多的是关于数学而不是关于C。@Joni我的确切感觉-这很奇怪,因为这应该是一个“你对C足够熟悉吗?”测试。第二个空格可能是
b/=2
;第一个大概是
b!=0
。我邀请您查看相关问题的右/左列表。然后选择。进一步,“但不是无符号字符,什么,255字节?”??我不知道你的平台是什么,但在我的平台上,一个无符号字符是一个字节。这个问题更多的是关于数学,而不是关于C。@Joni我的确切感觉——这很奇怪,因为这应该是一个“你对C够熟悉吗?”测试。在函数的输出中不包含换行符有很多好处。@JonathanLeffler没有函数应该做什么的规范,谁能告诉我们。如果没有,我们真的需要一个
?这个呢?
用于(int i=7;i>=0;i--)printf(“%d”,(x>>i)&1)
原始代码是一种规范形式;它在输出的末尾不包含换行符,并且为了便于一般使用,它不应该包含换行符。在函数的输出中不包含换行符有很多好处。@JonathanLeffler如果没有函数应该做什么的规范,谁会告诉。我们真的需要一个
if else
?这个呢?
对于(inti=7;i>=0;i--)printf(“%d”,(x>>i)&1);
原始代码是一种规范形式;它在输出的末尾不包括一个换行,并且为了一般有用,它不应该包括换行。您是否错过了一个“
b=
”??“
b=b>>1;
”@raj-raj.是的,谢谢。是个打字错误。他要求提示:“如果你能在不完全回答的情况下给我一个线索”,但你给了他答案你错过了一个“
b=
”?“
b=b>>1;
”@raj-raj.是的,谢谢。是个打字错误。他要求提示:如果你能给我一个线索而不完全说出答案“,但是你给了他答案