练习2-9 在求对二的补码时,表达式 x &= (x - 1) 可以删除 x 中最右边值为 1 的一个二进制位,请解释这样做的道理。用这一方法重写biecount函数,以加快其执行速度。
2016-09-08 11:47
851 查看
首先,还是先来说明一下题目的意思,一开始我看题目的时候,并没有正确理解题目的意思,题目说可以删除x中最右边值为1的一个二进制位,我一开始理解的是当x最右边一位为1时,删除这一位;看了答案之后才发现题目的意思是要将将从右边开始数第一个为1的二进制位置为0。
ok,题目说完,接下来说解题思路,额,今天有点累,直接把答案扒下来吧,额,自己真的是太懒了。。。
参考代码:
#include<stdio.h>
int bitcount(unsigned x)
{
int n = 0;
while(x > 0)
{
x = x & (x - 1);
n++;
}
return n;
}
int main()
{
unsigned x = 7;
int n;
n = bitcount(x);
printf("%d\n", n);
return 0;
}
ok,题目说完,接下来说解题思路,额,今天有点累,直接把答案扒下来吧,额,自己真的是太懒了。。。
参考代码:
#include<stdio.h>
int bitcount(unsigned x)
{
int n = 0;
while(x > 0)
{
x = x & (x - 1);
n++;
}
return n;
}
int main()
{
unsigned x = 7;
int n;
n = bitcount(x);
printf("%d\n", n);
return 0;
}
相关文章推荐
- 练习 2-9 在求对二的补码时,表达式x &= (x – 1)可以删除x中最右边值为1的一个二进制位。请解释这样做的道理。用这一方法重写bitcount函数,以加快其执行速度。
- 用c语言实现一个通讯录; 通讯录可以存储1000个人的信息,信息包括姓名、性别、年龄、电话、住址 提供方法: 1.添加联系人信息 2.删除指定联系人信息 3.查找指定联系人信息 4.修改指定联系&
- 【SQLServer】“无法对数据库'XXX' 执行删除,因为它正用于复制”的解决方法
- C#第2次试验(1).创建一个抽象类A,该类中包含一个求两个数之和抽象方法。创建一个子类B,在B中重写求和方法,且使用方法重载使得方法可以分别计算整数、双精度、字符串。
- 抽象类继承抽象类可以不重写父类的抽象方法,普通类继承抽象类必须重写父类中的抽象方法,实现接口也是同样的道理
- 重写QLineEdit,实现编辑框内添加删除按钮的功能(随时把控件Move到一个地方,然后show就可以了,这是万能的办法)
- # include <errno.h >查看错误代码errno是调试程序的一个重要方法。当Linux C API函数发生异常时,一般会将errno变量赋值一个整数,不同的值表示不同的含义,可以通过查看
- 【代码重构 & JDT】判断一个方法是否是实现重写,继承重写和递归
- 实现一个通讯录; 通讯录可以用来存储1000个人的信息,每个人的信息包括: 姓名、性别、年龄、电话、住址 提供方法: 1. 添加联系人信息 2. 删除指定联系人信息 3. 查找指定
- 编写类A,该类创建的对象包含一个方法f输出英文字母表,再编写一个A类的子类B,要求必须继承A类的方法f(不允许重写),子类创建的对象不仅可以调用方法f输出英文字线表,而且调用子类新增的方法g输出希腊字
- 练习2-6 编写一个函数setbits(x, p ,n, y),该函数返回对x执行下列操作后的结果值: 将x中从第p位开始的n个(二进制)位设置为y中最右边n位的值,x的其余各位保持不变。
- C#--第2周实验--任务13--创建一个抽象类A,创建一个子类B,在B中重写求和方法,且使用方法重载使得方法可以分别计算整数、双精度、字符串。
- mkdir是windows的一个命令,也就是在命令行可以直接运行的命令。如果你在命令行中可以直接执行"python" 那么就可以替换执行
- 数组练习:各种数组方法的使用&&事件练习:封装兼容性添加、删除事件的函数&&星级评分系统
- 一个if语句执行到一半的时候,用什么方法可以跳出来啊
- 10_9_2从类MyClass中派生一个类MyDervedClass,重写GetString(),使用该方法的基类实现代码从基类中返回一个字符串,但在返回的字符串中添加文本"(output fro)"
- 异或加密法 在对文本进行简单加密的时候,可以选择用一个n位的二进制数,对原文进行异或运算。 解密的方法就是再执行一次同样的操作。
- 异或加密法 在对文本进行简单加密的时候,可以选择用一个n位的二进制数,对原文进行异或运算。 解密的方法就是再执行一次同样的操作。
- UItextVeiw重写deletebackward方法&&正则表达式
- 删除重复值【根据两个字段判断】(只保留一个)&查看执行计划&统计信息