gpt4 book ai didi

c - C中的二进制整数除法?

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

我正在查看 binary integer division with remainder维基百科中的部分,想知道如何将其翻译成另一种语言,例如 C?

if D == 0 then error(DivisionByZeroException) end
Q := 0 -- initialize quotient and remainder to zero
R := 0
for i = n-1...0 do -- where n is number of bits in N
R := R << 1 -- left-shift R by 1 bit
R(0) := N(i) -- set the least-significant bit of R equal to bit i of the numerator
if R >= D then
R := R - D
Q(i) := 1
end
end

我知道如何翻译其中的大部分内容并进行位移,但我该如何做 R(0) = N(i)Q(i) = 1 当它们是整数而不是函数或函数指针时?很抱歉这个基本问题,我只是对这个小部分感兴趣。

最佳答案

这是你如何做的。

// R(0) := N(i)
R = (R & ~0x01) | ((N >> i) & 0x01);

第一部分清除 r 的第 0 位,然后将它与 N 的第 i 位进行“或”运算,您已将其向下移至第 0 位。如果 N(i) == 0,则必须先清除该位。

// Q(i) = 1
Q |= 0x01 << i;

在这种情况下,0x01 是一个位,然后将其移到位。由于您正在设置该位,而不管它之前是什么,因此 OR 运算将起作用。

给出一些通用的二元运算:

如果你想要一点信息 X(n):

(X >> n) & 0x01;

如果你想把某个位设置为 1 就是上面的。

如果要将位清零,X(n) = 0:

X &= ~(0x01 << n);

如果你想切换一点,X(n) = !X(n):

X ^= (0x01 << n);

如果你想给一个位赋一个二进制值,X(n) = y:

X = (X & ~(0x01 << n)) | (y << n);  // Assumes y = 0 or 1.

关于c - C中的二进制整数除法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28776014/

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