【问题标题】:How to convert char value to binary and display each bit separately? [duplicate]如何将 char 值转换为二进制并分别显示每个位? [复制]
【发布时间】:2018-10-05 11:27:02
【问题描述】:

作为练习,我尝试将输入的 char 值转换为二进制并显示 8 位输出的每一位。 我找到了一些转换示例代码:

int main (void)
{
char a =16;
int i=0;
for (i = 0; i < 8;i++) { 
printf("%d", !!((a << i) & 0x80));}
return 0;
}

但是,当我将输入的值用于代码时:

int main(void){
char a;
printf("Enter char value:", a);
scanf("%c", &a);
printf("a=%c", a);
return 0 ;}

给出了不正确的值。 还有我如何能够分别显示每一位?例如

printf("The sign bit is %d\n", &);
printf("The bit 6 is %d\n", &);
printf("The bit 5 is %d\n", &);
printf("The bit 4 is %d\n", &);
printf("The bit 3 is %d\n", &);
printf("The bit 2 is %d\n", &);
printf("The bit 1 is %d\n", &);
printf("The bit 0 is %d\n", &);

【问题讨论】:

  • 您想在这里使用a 发生什么? printf("Enter char value:", a);
  • 如果你用一个可识别的值初始化a,那会被打印出来吗?
  • scanf()的返回值是多少?
  • 你输入的是什么?
  • 如果硬编码和作为输入输入产生不同的结果,您是否考虑过检查是否有任何异常行为而不是归咎于转换为二进制?

标签: c binary char


【解决方案1】:

您可以使用 c 代码进行数学转换。我没有点击可能重复的帖子,而是点击类似的内容。

int i;
char c; 
int bits[8];
/*get a character from stdin and save it to c*/
i =  c + ‘0’;
if(i>=128){
    bits[7]=1;
     i= i-128;
}
if(i>=64){
    bits[6]=1;
    i = i - 64;
}
if(i >= 32){
    bits[5]=1;
    i =i- 32
}

// do this for all the bits

这应该可以工作,然后你就有了 bits[0] - bits[7] 你的 0-7 bits!我相信有更好的方法可以做到这一点,但这应该可行!

【讨论】:

  • i = c + ‘0’; 为什么?这是不对的。此外 - 为此使用unsigned charint bits[8] = {0}; 来初始化数组。纠正这可能会使这项工作,但为什么不使用一个简单的循环?
猜你喜欢
  • 2021-11-14
  • 2011-06-21
  • 2019-01-23
  • 2012-02-24
  • 2017-09-27
  • 2012-01-06
  • 2018-01-29
  • 1970-01-01
  • 2021-12-22
相关资源
最近更新 更多