gpt4 book ai didi

c - 为什么 printf() 在给定 3 的位掩码时打印 21 而不是 11?

转载 作者:太空宇宙 更新时间:2023-11-04 05:47:47 25 4
gpt4 key购买 nike

本练习的重点是打印数字的二进制表示。

给出以下代码,当我运行 print_binary(3) 时,我打印了 00000000000000000000000000000021 而不是预期的 00000000000000000000000000000011。

我想我在这里遗漏了一些东西。谁能解释一下为什么我会得到如此意想不到的结果?

我使用的是 gcc 版本 6.3.0 20170516 (Debian 6.3.0-18+deb9u1)。测试这个程序。

#include <stdio.h>
#include <stdbool.h>
#include <limits.h>

#define INT_BITS sizeof(int) * 8

unsigned int check_bit(unsigned int bit, unsigned int n) {
unsigned int mask = (1 << bit);
return n & mask;
}

void print_binary(unsigned int num) {
int bits[INT_BITS];
for (int i = INT_BITS - 1; i >= 0; i--) {
printf("%u", check_bit(i, num));
}
printf("\n");
}

最佳答案

因为当 check_bit() 作用于位 1 时,你得到:

unsigned int mask = (1 << 1);
return 3 & 2; /* n & mask => result is b11 & b10 which is b10 which is decimal 2 */

所以 2 使用 unsigned 说明符打印,因此你得到 ..021 而不是 ..011

关于c - 为什么 printf() 在给定 3 的位掩码时打印 21 而不是 11?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55798735/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com