位1的个数
编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。
示例 :
输入: 11
输出: 3
解释: 整数 11 的二进制表示为 00000000000000000000000000001011
 
示例 2:
输入: 128
输出: 1
解释: 整数 128 的二进制表示为 00000000000000000000000010000000
需要了解的知识:
位运算符
位运算符作用于位,并逐位执行操作。&、 | 和 ^ 的真值表如下所示:
p
q
p & q
p | q
p ^ q
0
0
0
0
0
0
1
0
1
1
1
1
1
1
0
1
0
0
1
1
假设如果 A = 60,且 B = 13,现在以二进制格式表示,它们如下所示:
A = 0011 1100
B = 0000 1101
-----------------
A&B = 0000 1100
A|B = 0011 1101
A^B = 0011 0001
~A  = 1100 0011
下表列出了 C# 支持的位运算符。假设变量 A 的值为 60,变量 B 的值为 13,则:
运算符
描述
实例
&
如果同时存在于两个操作数中,二进制 AND 运算符复制一位到结果中。
(A & B) 将得到 12,即为 0000 1100
|
如果存在于任一操作数中,二进制 OR 运算符复制一位到结果中。
(A | B) 将得到 61,即为 0011 1101
^
如果存在于其中一个操作数中但不同时存在于两个操作数中,二进制异或运算符复制一位到结果中。
(A ^ B) 将得到 49,即为 0011 0001
~
按位取反运算符是一元运算符,具有"翻转"位效果,即0变成1,1变成0,包括符号位。
(~A ) 将得到 -61,即为 1100 0011,一个有符号二进制数的补码形式。
<<
二进制左移运算符。左操作数的值向左移动右操作数指定的位数。
A << 2 将得到 240,即为 1111 0000
>>
二进制右移运算符。左操作数的值向右移动右操作数指定的位数。
A >> 2 将得到 15,即为 0000 1111
将二进制数i与1相与,判断是否为1,然后将tag=1左移一位得到tag=2,然后再与i相与,循环结束的条件是tag==0;该算法的时间复杂度为输入的i的位数。
public class ByteCompute {
public int byteCompute(int n){
int tag=1;
int count=0;
while(tag!=0){//由于int类型的函数是32位因此要循环32次
if((n&tag)!=0)
count++;
tag=tag<<1;
}
return count;
}

把一个整数n减去1,再和原来的整数与运算,会把该整数的最右边的1变成0,那么,一个整数的二进制中有多少个1,就可以进行多少次这样的操作。循环结束的条件是n为0;

public int byteCompute1(int n){
int count=0;
while(n!=0){//由于每次n和n-1相与都会导致,n的最右边的为1的元素变成0,因此总共要循环的次数就是1的个数次。
count++;
n=(n-1)&n;
}
return count;
}

leetcode-位1的个数(位与运算)的更多相关文章

  1. LeetCode. 位1的个数

    题目要求: 编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 '1' 的个数(也被称为汉明重量). 示例: 输入:00000000000000000000000000001011 输 ...

  2. BitMap - leetcode [位运算]

    136. Single Number 因为A XOR A = 0,且XOR运算是可交换的,于是,对于实例{2,1,4,5,2,4,1}就会有这样的结果: (2^1^4^5^2^4^1) => ( ...

  3. 【python】Leetcode每日一题-位1的个数

    [python]Leetcode每日一题-位1的个数 [题目描述] 编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 '1' 的个数(也被称为汉明重量). 示例1 ...

  4. leetcode - 位运算题目汇总(下)

    接上文leetcode - 位运算题目汇总(上),继续来切leetcode中Bit Manipulation下的题目. Bitwise AND of Numbers Range 给出一个范围,[m, ...

  5. Leetcode#191. Number of 1 Bits(位1的个数)

    题目描述 编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 '1' 的个数(也被称为汉明重量). 示例 : 输入: 11 输出: 3 解释: 整数 11 的二进制表示为 000000 ...

  6. LeetCode初级算法--其他01:位1的个数

    LeetCode初级算法--其他01:位1的个数 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net ...

  7. Java实现 LeetCode 191 位1的个数

    191. 位1的个数 编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 '1' 的个数(也被称为汉明重量). 示例 1: 输入:000000000000000000000000000 ...

  8. C#版 - Leetcode 201. 数字范围按位与(bitwise AND) - 题解

    C#版 - Leetcode 201. 数字范围按位与(bitwise AND) - 题解 在线提交: https://leetcode.com/problems/bitwise-and-of-num ...

  9. java编程之:按位与运算,等运算规则

    按位与运算符(&) 参加运算的两个数据,按二进制位进行“与”运算. 运算规则:0&0=0;   0&1=0;    1&0=0;     1&1=1; 即:两位 ...

随机推荐

  1. HDU 1885 Key Task (带门和钥匙的迷宫搜索 bfs+二进制压缩)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1885 Key Task Time Limit: 3000/1000 MS (Java/Others)  ...

  2. GIT 报错:Result too large 解决办法

    在使用bower install命令下载前端依赖的js插件时,git出错了,报错信息如下: bower ECMDERR Failed to execute "git ls-remote -- ...

  3. springboot启动报错:Could not resolve placeholder

    SpringBoot1.5,项目启动报错: Could not resolve placeholder 很明显是找不到配置文件引起的,查看配置文件目录结构如下: 很正常呀. 完全可以加载applica ...

  4. BindingException: Invalid bound statement (not found)问题排查:SpringBoot集成Mybatis重点分析

    重构代码,方法抛出异常:BindingException: Invalid bound statement (not found) 提示信息很明显:mybatis没有提供某方法 先不解释问题原因和排查 ...

  5. PX4地面站QGroundControl在ubuntu下的安装

    1.引言 相信很多玩开源无人机的朋友手上都有一架无人机,而不是仅仅停留在理论的学习和程序的学习.放飞自己组装的无人机才是乐趣所在,那么这本文就介绍玩无人机必不可少的地面站软件qgroundcontro ...

  6. SpringSecurity

    1.1    SpringSecurity技术简介与使用 1.1.1     简介 Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架. ...

  7. iOS:SQL

    iOS虽然也有SQL,不过用得少(至少我目前是这样).大数据直接丢给后台,小的用Plist足矣. 再退一步,有FMDB,原生的也用得少了. 下面是之前学SQL时候的笔记. 1.创建 1-1).打开:  ...

  8. Json中dumps、loads、dump、load函数实例讲解

    1.dumps() 1. json.dumps() 用于将字典(dic)类型的数据转成字符串(str),直接将dict类型的数据写入json文件中会发生报错,因此在将数据写入时需要用到该函数. imp ...

  9. Qt 项目主进程接收Alarm 后在GUI上显示,并且可以有选择性输出文件

    项目主进程接收报警后,将alarm msg 发送给代理, 并将其分发: else if (msg.name == "MesLCUalarmRep") { QString error ...

  10. PHP基础4--函数-数组

    主要 函数 数组 常用系统函数 函数 基础 1)定义 function 函数名([$形参1],[$形参2],.....) { //函数体 } 点击查看函数定义形式 2) 调用 函数名([$实参1][, ...