gpt4 book ai didi

c - 使用有限的位运算符将无符号整数乘以 10

转载 作者:太空狗 更新时间:2023-10-29 15:12:59 26 4
gpt4 key购买 nike

这是一道练习题:

编写一个将参数乘以 10 的函数。您只能使用这些运算符:<< - & ^ 并且唯一允许移位的常量是 1 2 4 8 16。

函数原型(prototype)为:

无符号整数(无符号整数 x);

我们得到了一个解决方案,它是:

unsigned int(unsigned int x) { 
return (x << 4) - (x << 2) - (x << 1);
}

我知道它有效,而且它通过从整数中减去 10 的倍数来实现。我不明白它为什么起作用,并且想了解如何得出这个答案的过程。

提前感谢任何答案!

最佳答案

(x << 4)本质上是 x * 16 , (x << 2)x * 4 , 和 (x << 1)x * 2 .因此,16x - 4x - 2x = 10x .

至于为什么(x << 4)等于x * 16 ,这是因为二进制表示。让我们以二进制形式取 10(为了清楚起见,只显示了 8 位;实际上左边还有一堆零):

00001010

现在让我们向左移动 4 个空格:

10100000

那是 160。

一种思考方式是,当您在基数 10 中添加一个零(即 10 -> 100)时,您将乘以 10。当您在基数 2 中添加一个零时,您将乘以 2。因此,移动 4 个空格(并因此添加 4 个零)乘以 2*2*2*2 = 16 .

关于c - 使用有限的位运算符将无符号整数乘以 10,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22120983/

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