【C语言】练习2-9
- 题目来源:《The C programming language》中的习题P38
- 练习2-9: 在求对二的补码时,表达式x &= (x-1)可以删除x中最右边值为1的一个二进制位。请解释这样做的道理。用这一方法重写下面的bitcount函数,以加快其执行速度。
#include<stdio.h>
void main(){
    unsigned x = ;     // 110_100_101
    int a = bitcount(x);
    printf("%d\n",a);
}
/*bitcount:获得x(二进制)中1的个数*/
int bitcount(unsigned x){
    int b = ;
    for(;x != ; x >>= ){
        if(x & ){
            b++;
        }
    }
    return b;
}
解题思路:对于x的二进制形式,分为两种:最右边二进制位为0和最右边二进制位为1
- 如果x的形式如XXX1, 那么x & (x-1)应该为 XXX0 & XXX1 = XXX0。 例如: 110_100_101 & 110_100_100 = 110_100_100。最右边的1被删除。
- 如果x的形式如XX10..00, 那么x & (x-1)应该为 XX01..11 & XX10..00 = XX00..00例如: 110_100_100 & 110_100_011 = 110_100_000。最右边的1被删除。
代码实现:
#include <stdio.h>
void main()
{
unsigned x = ; // 110_100_101
int count = ;
while (x != ) {
x &= (x-);
count++;
}
printf("1-bit count: %d\n", count);
}
【C语言】练习2-9的更多相关文章
- C语言  ·  高精度加法
		问题描述 输入两个整数a和b,输出这两个整数的和.a和b都不超过100位. 算法描述 由于a和b都比较大,所以不能直接使用语言中的标准数据类型来存储.对于这种问题,一般使用数组来处理. 定义一个数组A ... 
- Windows server 2012 添加中文语言包(英文转为中文)(离线)
		Windows server 2012 添加中文语言包(英文转为中文)(离线) 相关资料: 公司环境:亚马孙aws虚拟机 英文版Windows2012 中文SQL Server2012安装包,需要安装 ... 
- iOS开发系列--Swift语言
		概述 Swift是苹果2014年推出的全新的编程语言,它继承了C语言.ObjC的特性,且克服了C语言的兼容性问题.Swift发展过程中不仅保留了ObjC很多语法特性,它也借鉴了多种现代化语言的特点,在 ... 
- C语言  ·  Anagrams问题
		问题描述 Anagrams指的是具有如下特性的两个单词:在这两个单词当中,每一个英文字母(不区分大小写)所出现的次数都是相同的.例如,"Unclear"和"Nuclear ... 
- C语言  ·  字符转对比
		问题描述 给定两个仅由大写字母或小写字母组成的字符串(长度介于1到10之间),它们之间的关系是以下4中情况之一: 1:两个字符串长度不等.比如 Beijing 和 Hebei 2:两个字符串不仅长度相 ... 
- JAVA语言中的修饰符
		JAVA语言中的修饰符 -----------------------------------------------01--------------------------------------- ... 
- Atitit 项目语言的选择 java c#.net  php??
		Atitit 项目语言的选择 java c#.net php?? 1.1. 编程语言与技术,应该使用开放式的目前流行的语言趋势1 1.2. 从个人职业生涯考虑,java优先1 1.3. 从项目实际来 ... 
- 【开源】简单4步搞定QQ登录,无需什么代码功底【无语言界限】
		说17号发超简单的教程就17号,qq核审通过后就封装了这个,现在放出来~~ 这个是我封装的一个开源项目:https://github.com/dunitian/LoTQQLogin ————————— ... 
- InstallShield 脚本语言学习笔记
		InstallShield脚本语言是类似C语言,利用InstallShield的向导或模板都可以生成基本的脚本程序框架,可以在此基础上按自己的意愿进行修改和添加. 一.基本语法规则 ... 
- 用C语言封装OC对象(耐心阅读,非常重要)
		用C语言封装OC对象(耐心阅读,非常重要) 本文的主要内容来自这里 前言 做iOS开发的朋友,对OC肯定非常了解,那么大家有没有想过OC中NSInteger,NSObject,NSString这些对象 ... 
随机推荐
- Maven镜像收集
			本贴主要收集国内国外速度比较快的maven镜像,OSC的MAVEN已经关闭了 0.阿里Maven镜像 setting.xml https://github.com/ae6623/Zebra/blob/ ... 
- Windows下搭建elasticsearch集群案例
			https://blog.csdn.net/u014236259/article/details/64129918 
- iOS  MessagePack
			参考地址:http://msgpack.org Install pod "MPMessagePack" Writing #import <MPMessagePack/MPMe ... 
- iOS应用程序状态图
			理解应用的状态对于我们开发iOS大有裨益. 当前应用所处什么状态,什么促使它在各个状态间进行过渡,你的代码又是如何 唤醒这些过渡,等等等等. 先请看下图: 1. 当应用出于非运行状态时,它处于图中的& ... 
- 通过httpclient3实现文件下载以及获取文件下载名称
			package httpclient3test; import java.io.File; import java.io.FileNotFoundException; import java.io.F ... 
- [转]基本Guava工具
			转自:http://www.cnblogs.com/renchunxiao/p/3661918.html?utm_source=tuicool 使用Joiner类 将任意字符串通过分隔符进行连接到一起 ... 
- @Service注解的使用
			首先,在applicationContext.xml文件中加一行: <context:component-scan base-package="com.hzhi.clas"/ ... 
- [Android]Recovery调用外部Shell脚本,Shell脚本使用ui_print方法
			busybox_bin=/sbin/busybox # 获取PIPE get_outfd(){ | $busybox_bin grep -q 'pipe'; then else local all_p ... 
- 源代码解析Android中View的layout布局过程
			Android中的Veiw从内存中到呈如今UI界面上须要依次经历三个阶段:量算 -> 布局 -> 画图,关于View的量算.布局.画图的整体机制可參见博文 < Android中Vie ... 
- Software development --daily scrum team
			History[edit] Scrum was first defined as "a flexible, holistic product development strategy whe ... 
