我正在尝试用 C 语言打印二进制数。我遇到了以 0 开头的二进制数的问题。当您尝试将其保留在数组中并尝试打印它时,会出现随机数,当您使用 scanf 输入时,数字的前导零消失。
遇到这种情况我该怎么办?预先感谢您的帮助。
int main(){
int binarys[3] ={01001001, 01100110, 00100000};
size_t i;
for(i=0; i<3; i++)
{
printf("%d\n", binarys[i]);
}
int binary;
printf("Enter a binary: ");
scanf("%d", &binary);
printf("%d", binary);
}
输出:
262657
294984
32768
Enter a binary: 01001001
1001001
最佳答案
I'm having a problem with binary numbers starting with 0
Integer constants以 0
开头的不是二进制而是八进制。
如果您有一个提供 0b
前缀作为扩展的编译器(或者来自 future 的标准化版本),并且想要声明一个值为 32 的整数,以 2 为基数无论出于何种原因,请写入 0b00100000
。不过,它的内容仍然与您刚刚编写的 32
完全相同,因为 base 是数字表示的方式,并且不不影响其值(value)。
when you get input with scanf,
scanf
函数没有二进制转换说明符,%d
明确表示十进制,即基数 10。
如果你想扫描以二进制编写的数字,你需要读取一个字符串,确认它只有 1 和 0,然后自己转换它(即使用 strtol
像 strol(str, &end, 2)
)。
... the leading zero of the number disappears
默认情况下不打印前导零。
再次,printf
无论如何,没有二进制转换说明符,但如果要打印前导零,则需要设置字段宽度并请求零填充,例如 %08d
。
如果你想以二进制打印数字,你还需要先自己将它们转换为字符串。
关于c - 如何在数组内打印二进制数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71936327/