K&R 中的位计数功能 [关闭]

2023-12-29

K&R的《C程序设计语言》一书中,有一个位计数函数:

int bitsCount(unsigned x)
{
    int b;
    for (b = 0; x != 0; x >>= 1)
        if (x & 01)
            b++;
    return b;
}

我的问题是他们为什么使用x&01但不是x & 1 or x & 00000001? 01不是八进制1的意思吗?


从语义上讲,你是对的,这并不重要。x & 01, x & 1, x & 0x1等都会做完全相同的事情(并且在每个正常的编译器中,生成完全相同的代码)。您在这里看到的是作者的约定,曾经相当标准(但从未具有普遍性),现在则少得多。在这种情况下使用八进制是为了清楚地表明正在发生按位运算;我敢打赌,作者也以八进制定义了标志常量(旨在按位或在一起)。这是因为,推理 010 和 017 比推理 8 和 15 容易得多,因为您可以一次考虑一位数字。今天,我发现使用十六进制更常见,原因完全相同(按位运算一次应用一位数字)。十六进制相对于八进制的优点是十六进制数字与字节很好地对齐,并且我希望在现代代码中看到大多数用十六进制常量编写的按位运算(尽管微不足道的常量x & 1而不是x & 0x1在这种情况下)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

K&R 中的位计数功能 [关闭] 的相关文章

  • 仅使用扩展方法在 Linq 中进行漂亮、干净的交叉连接 [重复]

    这个问题在这里已经有答案了 可能的重复 使用扩展方法表示的嵌套 from LINQ 查询 https stackoverflow com questions 9115675 nested from linq query expressed
  • 双线性序列给出奇数结果

    我试图让我的表现技能 不存在 达到标准 但在将公式写入代码时遇到了问题 这是我试图将其引用为 转换 为代码的公式 考虑一个序列 u 其中 u 定义如下 号码u 0 1是第一个u 对于每个x in u then y 2 x 1 and z 3
  • 对静态成员变量的未定义引用

    我有一个有静态成员的类 它也是我的程序中其他几个类的基类 这是它的头文件 ifndef YARL OBJECT HPP define YARL OBJECT HPP namespace yarlObject class YarlObject
  • C语言中的递归是如何工作的?

    我试图了解 C 中递归的工作原理 任何人都可以给我解释控制流吗 include
  • 如何在线程创建和退出时调用函数?

    include
  • WP8.1 C# 绑定联系人图像

    信息很简单 我正在尝试创建一个可以显示用户联系人的应用程序 我也是一名自学成才的程序员 所以我在某些方面有编程经验 但总体来说我对数据绑定相对较新 首先 我有一个 ListView 控件 其中包含图像绑定
  • 在调用堆栈中看到大量 clr!CLR Semaphore::Wait

    我们看到很多像下面这样的调用堆栈 我可以知道什么条件 情况会发生这种情况吗 OS Thread Id 0x48654 559 Current frame ntdll NtWaitForSingleObject 0xa Child SP Re
  • 每次调用新方法时触发事件

    我正在做一个logger for a c 应用程序需要记录每个方法被调用的时间以及每个方法执行时间 我可以通过调用自己的方法来做到这一点EventLogger LogMethodCall方法在每个方法的开头 但我想知道是否有办法使CLR每次
  • 如何启动异步任务对象

    我想开始收集Task同时处理对象并等待所有对象完成 下面的代码显示了我想要的行为 public class Program class TaskTest private Task createPauseTask int ms works w
  • Confuser .NET 混淆器。安全吗? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我目前正在开发一个应用程序 其中阻止用户反编译代码非常重要 现在 我意识到 如果由经验丰富的程序员执行 大多数 exe 都是可反编译的
  • 如何使用boost库读取和写入.ini文件[重复]

    这个问题在这里已经有答案了 如何使用boost库读取和写入 或修改 ini文件 With Boost PropertyTree您可以读取并更新树 然后写入文件 请参阅load and save功能 看一下如何访问属性树中的数据 http w
  • 本地主机上的 .net HTTP_X_FORWARDED_FOR NULL

    抱歉 如果其他地方已经回答了这个问题 我找不到它 如果没有 我会尝试查找访问过该站点的机器的原始 IP 根据我的基本理解 变量HTTP X FORWARDED FOR无论代理和其他过滤器如何 都会显示用户的 IP 如果这是真的 我正在尝试对
  • SQL参数化查询不显示结果

    我的 DataAcess 类中有以下函数 但它没有显示任何结果 我的代码如下 public List
  • 该组件没有由 uri 标识的资源

    我想创建一个通用数据网格以在我的所有视图 用户控件上使用 这是我的结构 Class Library called Core Class called ViewBase public class ViewBase UserControl pu
  • 如何在给定点停止线程?

    我试图停止一些线程 阅读一些有关优雅地执行此操作的正确方法的内容 但我一定做错了什么 因为它根本不起作用 起初我尝试不使用lock with IsRunning不稳定 然后尝试使用锁 这是我所拥有的 private volatile boo
  • 清理堆分配对象的良好实践或约定?

    我正在学习C 我有 C C ObjC 背景 相当高级的语言 在 C 或 ObjC 上 作为函数或方法的结果返回堆分配的对象是很简单的 因为对象的清理是受管理的 按照惯例 会在适当的时候销毁 但我不知道在 C 中应该如何处理这个问题 例如 s
  • 扔掉挥发物安全吗?

    大多数时候 我都是这样做的 class a public a i 100 OK delete int j Compiler happy But is it safe The following code will lead compilat
  • C# amo 获取角色完整

    我正在开发一个 SSAS 项目 其中除其他事项外 我需要获取 C 中表格多维数据集的完整用户列表 目前我让它以这样的方式工作 我可以获得角色 但数据不完整 当我调用 Server Database Roles 为了便于阅读而简化 属性并枚举
  • 如何在用户空间程序中使用内核 libcrc32c (或相同的函数)?

    我想在我自己的用户空间程序中进行一些 CRC 检查 我发现内核加密库已经在系统中 并且支持 SSE4 2 我尝试直接 include
  • 类模板的 C++ 静态成员 - 链接器警告“多重定义”[重复]

    这个问题在这里已经有答案了 假设出于某种原因 我想要一个类模板 MyTemp 和一些静态数据成员 smDummyVar Mytemp h ifndef MY TEMP H define MY TEMP H template

随机推荐

  • 在 virtualenv 中安装 pysvn

    我可以使用二进制包在站点范围内安装 pysvn 例如 在 Ubuntu 中 sudo apt get install python svn 或者 在 Windows 上 我可以使用 exe 安装程序进行站点范围内的安装 在 virtuale
  • 检查 Laravel 中的验证是否失败

    我想知道使用这种代码编写验证何时失败 我正在使用拉拉维尔 5 4 https laravel com docs 5 4 this gt validate request name gt required min 2 max 255 我知道我
  • 联系人选择器显示号码、联系人姓名以及可能的联系人图像?

    有没有办法显示同时包含号码和联系人姓名的联系人选择器 现在我正在调用选择器 startActivityForResult new Intent Intent ACTION PICK Contacts Phones CONTENT URI 1
  • 使用异或的 GetHashCode() 问题

    我的理解是 您通常应该将 xor 与 GetHashCode 一起使用来生成 int 以通过其值 而不是通过其引用 来识别数据 这是一个简单的例子 class Foo int m a int m b public int A get ret
  • OpenCV 在函数内更改 Mat(Mat 范围)

    我将 Mat 传递给另一个函数并在被调用函数内更改它 我原以为作为一个更复杂的类型 它会自动通过引用传递 以便矩阵在调用函数中发生变化 但事实并非如此 有人可以向我指出如何从函数正确返回更改后的 Mat 的解释吗 这是代码片段 void c
  • 已弃用的 CLRegion 方法 - 如何获取半径?

    我正在使用geocodeAddressString completionHandler 方法 它返回 CLPlacemarks 数组 我必须获取纬度 经度 助记名和半径 虽然获得前 3 个很容易 double lat placemark l
  • OpenFire Server 中用户的 JID 应该是什么?

    您好 我对此很陌生 我已经设置了一个 Openfire 服务器并使用 Spark IM 来测试它 但对于 Android 应用程序代码 会话中用户的 JID 应该是 我尝试过 username ip address username ip
  • 在 Windows Phone 7 上将数据保存到独立存储的最佳方式是什么?

    我想将对象持久化到独立存储中 到目前为止我可以想到这些方法 保存时将它们序列化为 xml 文件 然后在保存时将它们序列化回来 使用对象数据库 对好的或推荐的怀疑比比皆是 例子是Perst http wmpoweruser com fully
  • 如何验证 okhttp 是否使用 http/2 进行请求?

    如何验证 okhttp 是否成功协商 http 2 并且没有使用 https 1 1 我可以检查回复中的一些信息吗 谢谢 托尼 仅供参考 从 okhttp 3 0 左右开始OkHttp Selected Protocol未打印 不过 可以在
  • 从服务 android 更新我的活动中的列表视图

    我有两节课 1 活动课 2 服务等级 当服务有任何更新时 我需要更新活动中的列表视图 实际上我尝试像聊天应用程序一样 我的服务总是检查我的数据库 如果它有任何新字符串 我需要在我的活动中更新而无需再次重建 只需刷新列表视图 我发现它将使用
  • 悬停时的原型 Element.toggle,禁用子元素

    我遇到以下情况 我有一个这样的表结构 tr td text td td text td td text td td a href img src a td td span style display hidden a href e a a
  • VRML 发生了什么?

    早在 20 世纪 90 年代末 当我在读研究生时 VRML 即将占领世界 我和我的同事通过将其连接到 Java 和 Javascript 代码 用它构建了各种有用且有趣的东西 当然 当时的计算机比现在慢很多倍 多核 CPU 很大程度上是科幻
  • 使用 CreateProcessWithLogonW 进行作业控制

    我正在编写的应用程序需要在主机系统上执行潜在的恶意代码 该代码仅与stdin stdout and stderr 并且不应尝试与文件系统或网络交互 我通过防火墙规则限制了网络访问 并通过以非特权用户身份运行该进程来限制文件系统访问NetUs
  • 子类中的 __slots__ 继承实际上是如何工作的?

    In the 关于槽的 Python 数据模型参考部分 http docs python org reference datamodel html slots有一个关于使用的注释列表 slots 我对第 1 条和第 6 条感到非常困惑 因为
  • VSS 到 Clearcase 的过渡,附加注释

    有没有办法执行 Clearcase 签入 其中签入注释直接附加到源文件中 这就像 VSS 所做的那样 请不要争论这是好事还是坏事 我在这里对这些事情的影响力为零 我需要将签入数据包括日期 用户和注释 通过 Clearcase 附加到文件末尾
  • 在 Window Phone 8.1 中从服务器收到原始推送通知后执行某些功能

    即使应用程序未运行 我也想在收到推送通知时执行我自己的函数 并且用户不需要单击操作栏中的通知 In the BackgroundTask cs我有以下代码片段 namespace BackgroundTasks public sealed
  • 地理位置成功回调 - 如何在此回调之外处理返回的对象?

    网络上大多数简单的 html5 地理定位示例都是这样的 if navigator geolocation navigator geolocation getCurrentPosition success error else no geol
  • iOS - watchOS 应用程序发布问题 CFBundleIdentifier 冲突

    应用程序上传后 我收到以下电子邮件 我们发现您的应用程序最近交付存在一个或多个问题 XXX 请更正以下问题 然后重新上传 ITMS 90806 CFBundleIdentifier 冲突 每个捆绑包必须有一个 唯一的包标识符 包标识符 捆绑
  • 如果容器隐藏,jQuery.validate 无效

    我有几个输入分成不同的容器 面板 我遇到的问题是 如果这些面板之一被隐藏 style display none jQuery validate 插件不会验证这些输入 我用一个小例子进行了测试 出现了同样的问题 view using Html
  • K&R 中的位计数功能 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 K R的 C程序设计语言 一书中 有一个位计数函数 int bitsCount unsigned x int b for b 0 x 0 x g