没有 for、while 或 if 循环的十进制到二进制
Posted
技术标签:
【中文标题】没有 for、while 或 if 循环的十进制到二进制【英文标题】:Decimal to binary without for, while, or if loops 【发布时间】:2021-02-09 07:03:55 【问题描述】:如何编写一个程序来读取整数并显示二进制数而不使用循环,只使用二进制运算符? (仅限基本功能)
#include<stdio.h>
#include<stdint.h>
#include<math.h>
int main()
uint8_t a;
scanf("%hhd", &a);
//i have read the integer, but I don't know how to go on
return 0;
【问题讨论】:
***.com/questions/111928/… 输出 MSB:putchar('0' + !!(a & 0x80))
这能回答你的问题吗? Is there a printf converter to print in binary format?
顺便说一下,“%hhd”的格式很糟糕。 C 可能将其理解为%hd
,即short int
,但您的变量是uint8_t
。写入堆栈的值将是short int
,可能是 16 位。您可能希望将简单的unsigned int
与%u
一起使用。如果您想继续使用uint8_t
,您可以参考另一个问题***.com/questions/23748257/…
@Robert:%hhd
有什么问题?当然,最好使用%hhu
,因为变量是uint8_t
(无符号类型),但C11 §7.21.6.2 The fscanf
function 指定hh
修饰符(之前的C99 也是如此)。我想你可以主张使用<inttypes.h>
和SCNu8
作为格式:"%" SCNu8
。
【参考方案1】:
不使用循环显示二进制数,仅使用二元运算符:
#include<stdio.h>
#include<stdint.h>
#include<math.h>
int main()
int a;
scanf("%u", &a);
printf("Number: 0x%X\n", a);
printf("%d", ((a & 0x80) >> 7));
printf("%d", ((a & 0x40) >> 6));
printf("%d", ((a & 0x20) >> 5));
printf("%d", ((a & 0x10) >> 4));
printf("%d", ((a & 0x08) >> 3));
printf("%d", ((a & 0x04) >> 2));
printf("%d", ((a & 0x02) >> 1));
printf("%d", ((a & 0x01) >> 0));
printf("\n");
return 0;
注意,由于输入是整数,我添加了printf
131
Number: 0x83
10000011
当然,使用循环会更容易:
int main()
int a;
uint8_t Mask;
uint8_t Shift;
scanf("%u", &a);
printf("Number: %X\n", a);
Mask = 0x80;
Shift = 7;
while (Mask > 0)
printf("%d", ((a & Mask) >> Shift));
Mask = Mask >> 1;
Shift--;
printf("\n");
return 0;
【讨论】:
以上是关于没有 for、while 或 if 循环的十进制到二进制的主要内容,如果未能解决你的问题,请参考以下文章
Python基础语法—— 条件语句(if)+循环语句(for+while)