1的个数和2的幂等数

2024-09-06 00:58
文章标签 个数

本文主要是介绍1的个数和2的幂等数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.整数作为二进制1的个数(编程之美当中有出现)

2.判断整数是否为2的幂等数(例如 1,2,4,8,16,32...)

3.某个整数的下一个2的幂等数或者该数就是2的幂等数

(一) 支持无符号整数(一般方法)

public static int numberOfOneForUnsignedBinary(int n){int count = 0;int i = n;while(i != 0){count += (i & 1);i = i >> 1;}return count;}
(二)支持所有整数(32位整形)

public static int numberOfOneForBinary(int n){int count = 0;int i = n;int leftMoveMask = 1;while(leftMoveMask != 0){count += ((i & leftMoveMask) != 0 ? 1 : 0);leftMoveMask =  leftMoveMask << 1;}return count;}
(三)支持所有整数(技巧性强)

public static int numberOfOneForBinary2(int n){int count = 0;int i = n;while(i != 0){count++;i = (i - 1) & i;}return count;}

(四)支持无符号整数(空间换时间)

public static int numberOfOneForUnsignedBinaryReadTable(int n){int[] bitTable4 = {0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4};int i = n;int count = 0;while(i != 0){count += bitTable4[0xf & i];i = i >> 4;}return count;}

(五)支持所有整数(平行二分算法,技巧性太强)

public static int numberOfOneForBinary3(int v){ v = (v & 0x55555555) + ((v >> 1) & 0x55555555) ; v = (v & 0x33333333) + ((v >> 2) & 0x33333333) ; v = (v & 0x0f0f0f0f) + ((v >> 4) & 0x0f0f0f0f) ; v = (v & 0x00ff00ff) + ((v >> 8) & 0x00ff00ff) ; v = (v & 0x0000ffff) + ((v >> 16) & 0x0000ffff) ; return v ; }
判断是否为2的幂等数

/** returns true if n is a power of two or zero*/
public static boolean isPowerOfTwo(int n){return ((n & (n - 1)) == 0);}
某个整数的下一个2的幂等数或者该数就是2的幂等数或者0

/** returns the next highest power of two, or the current value if it's already a power of two or zero*/
public static int nextHighestPowerOfTwo(int v) {v--;v |= v >> 1;v |= v >> 2;v |= v >> 4;v |= v >> 8;v |= v >> 16;v++;return v;}












这篇关于1的个数和2的幂等数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1140547

相关文章

spoj705( 求不相同的子串个数)

题意:求串s的不同子串的个数 解题思路:任何子串都是某个后缀的前缀,对n个后缀排序,求某个后缀的前缀的个数,减去height[i](第i个后缀与第i-1 个后缀有相同的height[i]个前缀)。 代码如下: #include<iostream>#include<algorithm>#include<stdio.h>#include<math.h>#include<cstrin

XTU 1233 n个硬币连续m个正面个数(dp)

题面: Coins Problem Description: Duoxida buys a bottle of MaiDong from a vending machine and the machine give her n coins back. She places them in a line randomly showing head face or tail face o

O(n)时间内对[0..n^-1]之间的n个数排序

题目 如何在O(n)时间内,对0到n^2-1之间的n个整数进行排序 思路 把整数转换为n进制再排序,每个数有两位,每位的取值范围是[0..n-1],再进行基数排序 代码 #include <iostream>#include <cmath>using namespace std;int n, radix, length_A, digit = 2;void Print(int *A,

LCP 485. 最大连续 1 的个数[lleetcode -11]

从今天起,我们的算法开始研究搜索,首先就是DFS深度优先搜索(depth-first seach,DFS)在搜索到一个新的节点时,立即对该新节点进行遍 历;因此遍历需要用先入后出的栈来实现,也可以通过与栈等价的递归来实现。对于树结构而言, 由于总是对新节点调用遍历,因此看起来是向着“深”的方向前进。 下面是一个一维的DFS算法 LCP 485. 最大连续 1 的个数 给定一个二进制数组 nu

双指针(5)_单调性_有效三角形的个数

个人主页:C++忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C++忠实粉丝 原创 双指针(5)_单调性_有效三角形的个数 收录于专栏【经典算法练习】 本专栏旨在分享学习C++的一点学习笔记,欢迎大家在评论区交流讨论💌 目录 1. 题目链接: 2.题目描述 : 3.解法 :     解法一(暴力枚举) :     算法思路 :     代码展示 : 暴力枚

HDU2521(求因子个数)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2521 解题思路: 数据量不大,直接O(n)遍历,对每个数求其因子个数,找出最大的即可。 完整代码: #include <functional>#include <algorithm>#include <iostream>#include <fstream>#includ

222.完全二叉树的节点个数

(写给未来遗忘的自己) 题目: 代码: class Solution {public:int countNodes(TreeNode* root) {queue<TreeNode*>node_que;if(root==nullptr) return 0;node_que.push(root);int result;while(!node_que.empty()){int layer_s

Kubernetes的alpha.kubernetes.io/nvidia-gpu无法限制GPU个数

问题描述: Pod.yaml文件中关于GPU资源的设置如下: 然而在docker中运行GPU程序时,发现宿主机上的两块GPU都在跑。甚至在yaml文件中删除关于GPU的请求,在docker中都可以运行GPU。 原因: 上例说明alpha.kubernetes.io/nvidia-gpu无效。查看yaml文件,发现该docker开启了特权模式(privileged:ture): 而

编写一个统计空格制表符与换行符个数的函数

int main(int argc, char* argv[]) {  double nc,nc1,nc2;     nc = nc1 = nc2 =0;  int c;  while((c = getchar()) != EOF)  {   if(c == '\t')    nc++;   else if(c == ' ')    nc1++;   else if(c == '\n')

用ACF和PACF计算出一堆数据的周期个数以及周期时长,数据分析python

具体步骤 1使用ACF和PACF:可以通过查看ACF图中的周期性峰值,找到数据中的周期性。如果ACF图在某个滞后期处出现显著的正相关峰值,并且这种模式在多个滞后周期中重复出现,这就是周期性信号的特征。而PACF则可以帮助确定延迟的直接影响。 2找周期数和周期长度:周期的时长可以通过ACF中第一个显著的峰值(排除滞后期为0时的峰值)来确定,而周期的个数则可以通过分析整个序列中的周期性重复次数来估计