这行代码是做什么的?

发布于 2024-07-26 04:12:54 字数 186 浏览 7 评论 0原文

对此代码的作用感到困惑

for (L=0; L < levels; L++, N_half>>=1){
    func( y, N_half);
} // end: levels for loop

特别是这个“ N_half>>=1 ”

谢谢

Confused as to what this code does

for (L=0; L < levels; L++, N_half>>=1){
    func( y, N_half);
} // end: levels for loop

In particular this " N_half>>=1 "

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

迷离° 2024-08-02 04:12:54

它通过在每次迭代时将 N_half 除以二来推进循环。 它相当于:

for (L=0; L<levels; ++L, N_half=N_half / 2) {
    ...
}

It advances the loop by dividing N_half by two at every iteration. It is equivalent to:

for (L=0; L<levels; ++L, N_half=N_half / 2) {
    ...
}
单调的奢华 2024-08-02 04:12:54

N_half>>=1 对 N_half 执行 1 位按位右移,这(对于非负数)将其除以 2。

>>=>> 的关系就像 +=+ 的关系一样。

N_half>>=1 performs a 1-place bitwise shift-right on N_half, which (for non-negative numbers) divides it by 2.

>>= is to >> as += is to +.

愛放△進行李 2024-08-02 04:12:54

>>= 运算符将数字的数字向右移动 k 位

示例:

二进制形式

N = 101010111 // 2-base  arithmetic system
N >>= 1; // `division` by 2
N: 010101011

通常十进制形式

N = 123456 // 10-base  arithmetic system
N >>= 2; // `division` by 10^2
N: 001234

,内存中的数字为二进制形式,>>=1 相当于除以 2 。

>>= operator shifts number's digits k positions at right

examples:

binary form

N = 101010111 // 2-base  arithmetic system
N >>= 1; // `division` by 2
N: 010101011

decimal form

N = 123456 // 10-base  arithmetic system
N >>= 2; // `division` by 10^2
N: 001234

as usual, the numbers in memory are in binary form and >>=1 is equivalent to division by 2.

可是我不能没有你 2024-08-02 04:12:54

如果 N_half 是正整数或无符号整数,则将其减半。

If N_half is a positive or unsigned integer, it halves it.

聽兲甴掵 2024-08-02 04:12:54

它将 N_half 右移 1(即将其除以二)并将结果存储回 N_half

It right shifts N_half by 1 (i.e. divides it by two) and stores the result back in N_half

━╋う一瞬間旳綻放 2024-08-02 04:12:54

这似乎与

for (L=0; L < levels; L++)
{
  func(y, N_Half); 
  N_Half /= 2;
}

自从我回答以来问题已被重新表述相同,因此这不再有效,但为了完整性而添加:如果在循环内没有执行任何其他操作,则相当于:

N_Half >>= levels;

警告:

  • 如果 N_Half << 2^levels(多次迭代为 0)
  • 如果 N_Half < 则为 0(第一次右移将根据实现使其成为正数)

This seems to be the same as

for (L=0; L < levels; L++)
{
  func(y, N_Half); 
  N_Half /= 2;
}

The question has been rephrased since I answered it, such that this is no longer valid, but added for completeness: If nothing else is done within the loop, it is equivalent to:

N_Half >>= levels;

Caveats:

  • if N_Half < 2^levels (0 for several iterations)
  • if N_Half < 0 (first rightshift will depending on the implementation make it a positive number)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文