c - 如何在数组内打印二进制数?

标签 c

我正在尝试用 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 constants0 开头的不是二进制而是八进制。

如果您有一个提供 0b 前缀作为扩展的编译器(或者来自 future 的标准化版本),并且想要声明一个值为 32 的整数,以 2 为基数无论出于何种原因,请写入 0b00100000。不过,它的内容仍然与您刚刚编写的 32 完全相同,因为 base 是数字表示的方式,并且不不影响其值(value)。

when you get input with scanf,

scanf函数没有二进制转换说明符,%d 明确表示十进制,即基数 10。

如果你想扫描以二进制编写的数字,你需要读取一个字符串,确认它只有 1 和 0,然后自己转换它(即使用 strtolstrol(str, &end, 2))。

... the leading zero of the number disappears

默认情况下不打印前导零。

再次,printf无论如何,没有二进制转换说明符,但如果要打印前导零,则需要设置字段宽度并请求零填充,例如 %08d

如果你想以二进制打印数字,你还需要先自己将它们转换为字符串。

关于c - 如何在数组内打印二进制数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71936327/

相关文章:

objective-c - b2PolygonShape::TestPoint(p1, p2) 中的变换参数是什么?

c++ - 将所有重音字母更改为 C++ 中的普通字母

c - 在c中打印文件的某一行

c - 重定向到 file.txt 时 fork() 的意外输出

C头文件使用和代码重用

c - 生成正弦波超过 1 秒时出现问题

c - 在 glib 库中,我不明白为什么 union data[2] 的 struct _GValue 有 2 个元素?

c - 如何计算字符串表达式并返回 C 中的值?

无法按 Ctrl + D 到达 EOF

c++ - 具有可变参数的嵌套宏在 GCC 中编译但在 MSVC 中不编译