#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 二进制表示形式到十进制的转换发生在哪里。
printf 是否将二进制数转换为十进制形式?
不,
printf
只是显示要在标准输出上提供的参数。format specifiers
。互联网上有很多关于此的材料。
程序中的哪个位置将 int16_t 形式的 01001 进行转换 变成 9 发生
它发生在以下行 -
result |= 1 << (N_BITS - i - 1);
解释 -
该程序逐个字符读取给定的字符串,如果在字符串中遇到“1”,则将这些位设置为整数值。整数变量初始化为 0,这意味着最初所有位都设置为 0。