gpt4 book ai didi

c - 反转订单时遇到问题

转载 作者:行者123 更新时间:2023-11-30 14:31:01 25 4
gpt4 key购买 nike

我试图在c中打印出二进制数,但是我遇到的困境是它以相反的顺序打印出来。我定义了一个函数来告诉我有多少位,这样我就可以从最后一位开始工作

获得我可以使用的第n位

(value >> totalNumberOfBits) & 1;

在 while 循环中,我可以运行它,直到 totalNumberOfBits == 0;

就这样

while(totalNumberOfBits!= 0){
putchar(n >> totalNumberOfBits)&1;
totalNumberOfBits--;
}

欢迎任何指点 - 我想我可能会大错特错,我有一种方法可以向后打印它们的数字,但我正在尝试找到一种方法来避免这种情况

谢谢

最佳答案

您的 putchar(n >> totalNumberOfBits)&1 是一个错误(注意右括号在哪里)。

您当前的代码输出看似随机的值(基于数字中的“当前”和更重要的位),如果您只是将正确的父级移动到您想要放置的位置,那么您将写入 '\0''\1'(空值和另一个控制代码)。相反,您需要写入 '0''1'(数字 0 和 1)。

这是通过示例最好地展示的内容之一:

void f() {
// hardcode total_bits values for this example
// in reality you'd call your function
int num = 42; // 101010 in binary
for (int total_bits = 6; total_bits;) {
putchar("01"[(num >> --total_bits) & 1]);
}

num = 5; // 101 in binary
// loop written verbosely, but does exactly the same:
for (int total_bits = 3; total_bits;) {
--total_bits; // decrement after condition is checked, before used
int bit = (num >> total_bits) & 1; // bit is always 0 or 1
char c = "01"[bit]; // c is always '0' or '1'
putchar(c);
}
}

注意减量的位置(如果需要,可以移动,但不能移动到 for 循环的第三部分 - 这会改变计算顺序),并且此循环不处理 num 为零时的情况。

关于c - 反转订单时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2192376/

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