加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – (数字)和( – 数字)

发布时间:2020-12-16 05:41:11 所属栏目:百科 来源:网络整理
导读:(数) (-数)?我已经搜索,但无法找到意思 我想用i (-i)in for循环像: for (i = 0; i = n; i += i (-i)) 解决方法 假设2的补码(或者我是无符号的),-i等于?i 1. 我 (?i 1)是提取i的最低位的技巧. 它的作用是因为1实际做的是设置最低的清除位,并清除比所有位低
(数)& (-数)?我已经搜索,但无法找到意思

我想用i& (-i)in for循环像:

for (i = 0; i <= n; i += i & (-i))

解决方法

假设2的补码(或者我是无符号的),-i等于?i 1.

我& (?i 1)是提取i的最低位的技巧.

它的作用是因为1实际做的是设置最低的清除位,并清除比所有位低的位.所以在i和?i 1中设置的唯一位是从i(即?i中的最低清除位)的最低位.在?i 1中,低于该位的位是清楚的,并且高于i的位在i和?i之间是不相等的.

在循环中使用它似乎是奇怪的,除非循环体修改i,因为i = i& (-i)是一个幂等的操作:再次执行两次相同的结果.

[编辑:在其他地方的评论中你指出,代码实际上是i = i& (-一世).那么对于非零我做的是清除i的最低位的集合,并将下一个清除位设置为101100 – > 110000.对于没有比最低设置位(包括i = 0)更高的位的i,将i设置为0.因此,如果不是因为我从0开始的事实,每个循环将至少增加i有时更多的是上一个循环的两倍,直到最终超过n并且断开或变为0并永久循环.

在没有评论的情况下编写代码通常是不可原谅的,但是根据问题的领域可能这是一个“显而易见的”循环过的值序列.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读