printf 是否将二进制数转换为十进制形式?

问题描述 投票:0回答:1
#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include <assert.h>

#define N_BITS 16

int16_t sixteen_in(char *bits);

int main(int argc, char *argv[]) {
    for (int arg = 1; arg < argc; arg++) {
        printf("%d\n", sixteen_in(argv[arg]));
    }

    return 0;
}

// given a strings of binary digits ('1' and '0')
// return corresponding signed 16 bit integer

int16_t sixteen_in(char *bits) {
    assert(strlen(bits) == N_BITS);
    int16_t result = 0;
    for (int i = 0; i < N_BITS; i++) {
        if (bits[i] == '1') {
            result |= 1 << (N_BITS - i - 1);
        }
    }
    return result;
}

根据我的理解,sixteen_in(char *bits) 函数将返回一个“结果”,即传入字符串的 int16_t 二进制表示形式。 因此,如果将字符串“01001”传递到 Sixteen_in 函数中,“结果”将为 int_16 形式的 01001。

但是,每当我运行“01001”程序时,输出都是 9,我理解这是 01001 的十进制形式。

所以,我的问题是,程序中哪里发生了从 int16_t 形式的 01001 到 9 的转换。我假设它是由 main 中的 printf 执行的,因为这是调用该函数的地方。

对此有一些见解将不胜感激:))

输出是十进制形式,但是,我不明白从 int16_t 二进制表示形式到十进制的转换发生在哪里。

c binary printf
1个回答
0
投票

printf 是否将二进制数转换为十进制形式?

不,

printf
只是显示要在标准输出上提供的参数。
它唯一的控件是
format specifiers
。互联网上有很多关于此的材料。

程序中的哪个位置将 int16_t 形式的 01001 进行转换 变成 9 发生

它发生在以下行 -

result |= 1 << (N_BITS - i - 1);

解释 -
该程序逐个字符读取给定的字符串,如果在字符串中遇到“1”,则将这些位设置为整数值。整数变量初始化为 0,这意味着最初所有位都设置为 0。

© www.soinside.com 2019 - 2024. All rights reserved.