我正在用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

推荐答案

我对以0开头的二进制数有问题

0开头的Integer constants不是二进制而是八进制.

如果有一个编译器提供0b前缀作为扩展名(或者来自标准化后的将来),并且想要声明一个值为32的整数,无论出于什么原因,都可以写0b00100000.它仍然有完全相同的内容,就像你刚刚写了32一样,因为base是一个数字是represented,并且不影响它的值.

当你用scanf获得输入时,

scanf函数没有二进制的转换说明符,%d显式表示decimal,即基数10.

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

... 数字的前导零消失

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

同样,printf也没有二进制转换说明符,但如果要打印前导零,则需要设置字段宽度并请求零填充,如%08d.

如果你想用二进制打印数字,你也需要先把它们转换成字符串.

C++相关问答推荐

需要大整数和浮点数.使用long long int和long double

在使用GTK 4 Columnview列表模型时,如何为多列添加排序函数.C编码,Linux/GNOME环境

C中是否有语法可以直接初始化一个常量文本常量数组的 struct 成员?

如何在C宏中确定 struct 中元素的类型?

有没有可能我不能打印?(C,流程)

在C语言中,在数学运算过程中,为什么浮点数在变量中的行为不同

将宏值传递给ARM链接器,该链接器将变量放置在特定位置

使用scanf在C中读取和存储文件中的值

加密解密工作正常,但返回错误0x80090005

SSH会话出现意外状态

为什么将函数名括在括号中会禁用隐式声明?

如何在下面的C代码中正确管理内存?

将变量或参数打包到 struct /联合中是否会带来意想不到的性能损失?

C代码可以在在线编译器上运行,但不能在Leetcode上运行

GETS()在C++中重复它前面的行

与外部SPI闪存通信时是否应禁用中断?

为什么写入关闭管道会返回成功

我怎样才能用c语言正常运行这两个进程?

用于内存布局的size命令(文本、数据、bss)

C 有没有办法比较多个字符串? [我通过fgets()输入它们]