C程序设计语言第二版习题2-9

简介: 在求反码时,表达式 x &= (x - 1) 用于把x最右边的值为1的位删除掉。请解释一下这样做的道理。用这一方法重写bitcount函数 ,使之执行得更快一点

问题描述

在求反码时,表达式 x &= (x - 1) 用于把x最右边的值为1的位删除掉。请解释一下这样做的道理。用这一方法重写bitcount函数 ,使之执行得更快一点

问题分解

  • 主函数main
  • 核心函数 bitcount(x)。我们先来看看书中例子 bitcount的算法实现:
int bitcount(unsigned x)
{
  int b;
  for(b = 0; x != 0; x >>= 1)
  {
    if(x & 1)
      b++;
  }
  return b;
}

从以上代码可知, bitcount 的实现逻辑是根据任何数与1进行位与计算可判断出次数的最右侧是否为1, 根据此原理不断将x右移,妹出现一次1记录一次。 根据题意,我们现在要改造bitcount的实现方式,借用 x &= (x - 1) 。如何理解呢? 我们知道二进制的特性, 不是0 就是1, 所以x & x - 1操作后的最右边值一定是互反的, 这样,x & (x - 1)的最右边的值一定为0,如此循环后x的最终值为0,循环次数即为x中值为1的个数。

代码实现


#include<stdio.h>
int bitcount(unsigned x);
​
int main()
{
  unsigned x;
  int r;
  x = 3;
  r = bitcount(x);
  printf("The result is: %u \n", r);
  return 0;
}
​
//使用求反码的方式 
int bitcount(unsigned x)
{
  int b;
  for(b = 0; x != 0; b++)
  {
    x &= (x - 1);
  }
  return b;
}

对比两个bitcount函数,我们发现第一个bitcount 中,for每执行一次,比第二个的bitcount 多执行了一次位与(&)操作,因此可以说第二个bitcount的执行速度是更快的。

目录
相关文章
|
边缘计算 人工智能 负载均衡
什么是SD-WAN?
【4月更文挑战第15天】
8769 5
|
4月前
|
人工智能 安全 数据挖掘
阿里云百炼自建智能体AI支付异常事件复盘与问题分析
大模型在场景识别、数据核验、逻辑判断上存在严重短板,无法甄别虚假交易场景;配套的支付MCP体验组件缺乏支付前置风险校验、订单真实性核验、履约能力校验的关键机制;同时模型与支付组件的协同风控逻辑完全失效,允许未核验、不真实的测试订单调用真实金融支付接口,最终造成用户资金受损、无服务履约的异常结果,也暴露了当前AI+支付场景体验版功能存在严重的安全与流程漏洞。
|
8月前
|
存储 前端开发 安全
OnlyOffice 平替,用 Vue3 + Vite 做了个“本地 OnlyOffice”:接入成本低到离谱!!!
onlyoffice-web-local 是基于 Vue3+Vite 的纯前端本地 Office 编辑器,复用 OnlyOffice Web SDK 与 x2t-wasm,支持浏览器内打开/编辑/导出 Word/Excel/PPT,无需服务端部署,文件不出终端,隐私安全、接入极简,专治“只需单人编辑”的轻量场景。(239字)
1861 0
|
10月前
|
开发者 Windows
Acrobat DC 2020 Mac 版PDF阅读器安装教程(简单易懂版)
下载Acrobat_DC_2020_Mac.dmg镜像文件,双击挂载后运行Install.app,按向导完成安装。若系统阻止打开,前往“安全性与隐私”设置点击“仍要打开”即可正常使用。
|
11月前
|
缓存 网络协议 Linux
Linux系统下 nslookup命令的基本使用
Linux系统下 nslookup命令的基本使用
2340 3
Linux系统下 nslookup命令的基本使用
|
4月前
|
人工智能 搜索推荐 数据挖掘
数据挖掘有哪些数据来源?一文盘点数据挖掘的公开数据来源!
本文系统梳理了AI时代必备的优质公开数据源,涵盖政府宏观、企业金融、互联网、电商、媒体、交通及行业研究七大类共20+平台,如国家统计局、EDGAR、Statcounter、猫眼专业版等,助你低成本、高效率获取高质量数据,夯实AI应用根基。
|
8月前
|
人工智能 监控 安全
AI 软件的开发上线
2026年AI软件上线已远超技术发布,是涵盖算法备案、安全评估、标识义务、端云协同部署、灰度测试、LLMOps监控及RLHF 2.0自学习迭代的系统工程,合规与治理成本成为关键门槛。(239字)
|
人工智能 运维 开发工具
产品动态丨阿里云计算巢月刊-2025年第3期
让优秀的企业软件生于云、长于云
|
Web App开发 存储 缓存
HTTP,WebSocket 和 聊天室
HTTP,WebSocket 和 聊天室
659 0
物联网:“定向卡”与“通用卡”的区别
在讨论“定向卡”与“通用卡”的区别时,我们首先要明确这两种卡通常是在不同背景下被提及的,比如在营销、金融服务、会员卡系统等领域。不过,为了提供一个通用的、跨领域的理解,我们可以从以下几个维度来探讨它们的区别:

热门文章

最新文章