对2进制的数据 找到他的1的个数,我也是在网上看到的,讲计算机组成原理有类似的。蒙的一下 真是想不起来啊
真是越来越感觉大学计算机基础课的重要性了。
描述是这样的,加入一个int型是2个字节(其实4个,就简单写了)
假如有这么这个2进制数据 1101 1001,你应该怎么求他的那个1的个数呢。
按照咱们程序员来想,求8位的 ,那我就去求4位的,让哥求4位哥去求2位的,那么基本逻辑已经确定了。用递归的啦,程序员的基础了
慢慢来说
怎么来求相邻2个的,为了 效率 我们用的是&,想想看 我们利用0101(ox 5) 和操作数 1010 进行&
0 1 0 1
& 1 0 1 0
——————得到是什么呢? 看那个01 01 利用他们得到基数位的1个数 ,那么1010 左移一位 变成 0101
a: 0 0 0 0
0 1 0 1
& 0 1 0 1
——————得到了偶数位的个数,那么a+b那么是相邻2个的1的个数,剩下的求4位,8位,什么的都好求了
b: 0 1 0 1
在这里粘贴网上的代码
private final long MASK_1 = 0x5555555555555555L;
private final long MASK_2 = 0x3333333333333333L;
private final long MASK_4 = 0x0F0F0F0F0F0F0F0FL;
private final long MASK_8 = 0x00FF00FF00FF00FFL;
private final long MASK_16 = 0x0000FFFF0000FFFFL;
private final long MASK_32 = 0x00000000FFFFFFFFL;
Parallel Count
public int bitCount_Parallel(long n){
n = (n & MASK_1) + ((n >>> 1) & MASK_1);
n = (n & MASK_2) + ((n >>> 2) & MASK_2);
n = (n & MASK_4) + ((n >>> 4) & MASK_4);
n = (n & MASK_8) + ((n >>> 8) & MASK_8);
n = (n & MASK_16) + ((n >>> 16) & MASK_16);
n = (n & MASK_32) + ((n >>> 32) & MASK_32);
return (int)n;
}
我想这里好理解多了把,基本原理是个递归,编程序吗 思路很重要的啦。
分享到:
相关推荐
2. **位操作法**:利用位操作(如按位与、按位异或等)可以更高效地计算二进制中1的个数。一种常用的位操作技巧是“Brian Kernighan算法”。首先,将数与它减1的结果进行异或操作,这会将所有连续的1变成0,而把0...
2. **位操作的应用**:利用位操作来实现高效计算二进制位中的1或0的个数。 3. **算法逻辑**:具体介绍两种算法逻辑,一种是计算1的个数,另一种是计算0的个数。 4. **C++ 实现**:提供完整的C++代码实现,包括函数...
这种方法的基本思路是通过不断将给定的数字除以2并检查余数来确定二进制表示中“1”的个数。具体步骤如下: 1. **初始化计数器**:设置一个变量`num`用于记录“1”的个数,初始值设为0。 2. **循环处理**:使用一个...
汇编实现统计输入数据中1的个数,转换为二进制判断
根据给定文件的信息,本文将围绕“十进制转二进制及统计1的个数”的主题进行深入探讨。此问题不仅涉及基本的程序设计能力,还需要对位运算有一定的了解。 ### 一、问题背景与定义 #### 1.1 问题背景 在计算机科学...
给定的描述要求我们实现一个函数,输入一个整数,然后计算并返回该整数在二进制表示下的1的个数。例如,整数9的二进制表示是1001,其中有2位是1。所以,对于输入9,我们的函数应该输出2。 在提供的代码片段中,定义...
* 进制是指数字系统中使用的基础符号的个数,常见的进制有二进制、八进制、十进制、十六进制等。 * 进制转换是指将一个数从一种进制转换到另一种进制的过程。 二、十进制到二进制的转换 * 十进制数1000对应的二...
"判断32位无符号整数二进制中1的个数" 本资源主要介绍了在32位无符号整数二进制中统计1的个数的四种方法。 方法一:逐位比较法 该方法的思路是通过逐位比较来统计1的个数。代码如下: ```c int findone(unsigned ...
2. **计算位数**:统计文件中0和1的个数,可以逐字节进行,每个字节转化为二进制字符串,然后遍历字符串计数。另一种方法是利用位运算,如异或操作(^),连续异或0或1可以得到当前字节中1的个数,因为任何数与0异或...
在本题中,我们探讨的是如何利用JavaScript计算一个十进制数转换为二进制表示后,其中包含的“1”的个数。这是一个常见的编程问题,特别是在面试和笔试中经常出现。 首先,我们可以使用JavaScript的`toString`方法...
当我们需要计算数字中"1"的个数时,首先要将数字转换为字符串形式,因为只有在字符串中我们才能逐字符地检查并计数。C语言中没有内置的整数到字符串的直接转换函数,通常我们会用`itoa()`(非标准库函数)或`...
因此,计算1的个数实际上是在问:在0到N(包含N)的整数中,它们的二进制表示一共包含多少个1。 要解决这个问题,我们可以采用几种不同的算法策略。一种常见方法是逐个检查每个数字,并统计其二进制表示中的1。这个...
在Java编程中,计算一个整数在二进制表示中1的个数是一个常见的问题,尤其在面试中经常被用来考察候选人的逻辑思维和算法理解能力。这个问题可以通过两种主要方法解决:迭代和递归。这里我们关注的是递归方法,它能...
首先,介绍一种常见的方法来计算二进制中1的个数,称为移位法。移位法的基本思想是通过逐次右移二进制数的位来检查每一位是否为1。每次移动时,如果最低位(最右边的位)是1,则计数器加1。代码如下: ```cpp int ...
在计算机科学中,快速计算一个整数中二进制表示中的1的个数是一个常见的算法问题,也称为位计数或比特计数。这个任务在处理位操作、哈希函数和许多其他计算密集型问题时非常有用。在这个Java实例中,我们看到一个名...
Python-二进制统计 计算二进制文件中 1 和 0 的数量。 灵感来自。 计算二进制文件中 1 和 0 的数量。 计算目录中 1 和 0 的数量。 以十六进制显示文件。 以二进制显示文件。
二进制位不同的个数 Time Limit:1000MS Memory Limit:65536KB Total Submit:16 Accepted:9 Description 对于两个非负整数x 和y,函数f(x,y) 定义为x 和y 在二进制表示时,其对应位不同的个数。例如,f(2,3)=1, f...
1. 二进制转十进制:采用“按权展开求和”的方法,每个二进制位乘以其权重(2的幂次),然后将所有结果相加。 2. 十进制转二进制:通常使用“除二取余”法,不断将十进制数除以2,记录余数,直到商为0,然后将余数...
例如,如果十六进制字符串为"ABCD",转换成二进制是1010101111001101,我们计算1的个数,然后设置一个奇校验位(如果1的个数为奇数)或偶校验位(如果1的个数为偶数)。 提供的压缩包文件名为"CheckSum.exe",这...