返回介绍

17.3 Shifts

发布于 2025-02-22 14:00:46 字数 659 浏览 0 评论 0 收藏 0

C/C++的移位操作通过<<和>>实现。 这里有一个例子函数,计算输入变量有多少个位被置为 1.

#!cpp
#define IS_SET(flag, bit) ((flag) & (bit))
int f(unsigned int a)
{
    int i;
    int rt=0;
    for (i=0; i<32; i++)
        if (IS_SET (a, 1<<i))
        rt++;

    return rt;
    };

在循环中,迭代计数从 0 到 31,1<<i 语句将计数从 1 到 0x80000000。1<<i 即 1 左移 n 位,将包含 32 位数字所有可能的 bit 位。每次移位仅有 1 位被置 1,其它位均为 0,IS_SET 宏将判断 a 对应的位是否置 1。

enter image description here

IS_SET 宏就是逻辑与(AND) 操作,如果对应的位不为 1,则返回 0。if 条件表达式如果不为 0,if() 将被触发。

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

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

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文