查找数N二进制中1的个数(JS版 和 Java版)
(function(){
function getOne(n) {
var c = 0;
for(var i = 0;i < 32;i ++){
if(((1 << i) & n) != 0){
c++;
}
}
return c;
}
console.log(getOne(10));
console.log(getOne(-10));
})();
//比较最低位是否为1,复杂度O(logn),仅适合正数,当是负数,将出现死循环
function getOne(n){
var c = 0;
while(n){
if(n&1){
c ++;
}
n >>= 1;
}
return c;
}
//同上,适合所有的数
function getOne(n){
var c = 0;
while(n != 0){
if((n & 1) != 0){
c++;
}
n >>>= 1;
}
return c;
}
function getOne(n) {
var c = 0;
for (var i = 1; i; i <<= 1) {
if (i & n) {
c++;
}
}
return c;
}
//int类型的是32位的数字,故只需要统计这32位上的数字的1的个数
function getOne(n) {
var c = 0;
for(var i = 0;i < 32;i ++){
if(((1 << i) & n) != 0){
c++;
}
}
return c;
}
//快速去掉最低位1
function getOne(n){
var c = 0;
while(n){
n = n &(n - 1);
c++;
}
return c;
}
public class BinaryOneCount {
public static void main(String[] args) {
new BinaryOneCount().start();
}
private void start() {
int n = -10;
countOne(n);
countOne(n = 10);
countOne(n = 103);
countOne(n = 30);
}
private void countOne(int n) {
System.out.println(Integer.toBinaryString(n));
System.out.println(Integer.bitCount(n));
countBinaryOneBit(n);
countBinaryOneBit1(n);
countBinaryOneBit2(n);
}
/**
* 查看当前最低位是否为1,是加1,否则就将当前数字无符号左移1位,进行下一轮判断
* @param n
*/
private void countBinaryOneBit(int n) {
int c = 0;
while (n != 0) {
if ((n & 1) != 0) {
c++;
}
n >>>= 1;
}
System.out.println(c);
}
/**
* 每次循环将最低位1去掉,这样进行的次数就是1的个数
* @param n
*/
private void countBinaryOneBit1(int n) {
int c = 0;
while (n != 0) {
n &= (n - 1);
c++;
}
System.out.println(c);
}
/**
* 由于是32位的Int类型的数字,故只需要统计这32位上的数字1的个数
* @param n
*/
private void countBinaryOneBit2(int n){
int c = 0;
for(int i = 0;i < 32;i ++){
if((n&(1<<i)) != 0){
c ++;
}
}
System.out.println(c);
}
}
查找数N二进制中1的个数(JS版 和 Java版)的更多相关文章
- 剑指offer编程题Java实现——面试题10二进制中1的个数
题目: 请实现一个函数,输入一个整数,输出该整数二进制表示中1的个数.例如,把9表示成二进制是1001,有2位是1,该函数输出2解法:把整数减一和原来的数做与运算,会把该整数二进制表示中的最低位的1变 ...
- VIPKID:笔试题(数组中和为0的一对数的数量,十进制转二进制中1的个数)
1. 求数组中的和为0 的一对数的数量 注意,需要用到set import java.util.Scanner; public class Main{ public static void main( ...
- Algorithm --> 二进制中1的个数
行文脉络 解法一——除法 解法二——移位 解法三——高效移位 解法四——查表 扩展问题——异或后转化为该问题 对于一个字节(8bit)的变量,求其二进制“1”的个数.例如6(二进制0000 0110) ...
- 统计无符号整数二进制中1的个数(Hamming weight)
1.问题来源 之所以来记录这个问题的解法,是因为在在线编程中经常遇到,比如编程之美和京东的校招笔试以及很多其他公司都累此不疲的出这个考题.看似简单的问题,背后却隐藏着很多精妙的解法.查找网上资料,才知 ...
- 剑指Offer面试题:9.二进制中1的个数
一.题目:二进制中1的个数 题目:请实现一个函数,输入一个整数,输出该数二进制表示中1的个数.例如把9表示成二进制是1001,有2位是1.因此如果输入9,该函数输出2. 二.可能引起死循环的解法 一个 ...
- 剑指Offer:二进制中1的个数
题目:输入一个整数,输出该数二进制表示中1的个数. // 二进制中1的个数 #include <stdio.h> int wrong_count_1_bits(int n) // 错误解法 ...
- 1513:二进制中1的个数 @jobdu
题目1513:二进制中1的个数 时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:1341 解决:455 题目描述: 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 输入: ...
- 基于visual Studio2013解决面试题之0410计算二进制中1的个数
题目
- [PHP]算法-二进制中1的个数的PHP实现
二进制中1的个数: 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 思路: 1.右移位运算>> 和 与运算& 2.先移位个然后再与1 &运算为1的就是1 ...
随机推荐
- VMWare 不能识别SD卡
打开service
- linux od命令: 按不同进制显示文件
介绍:od(octal dump)命令可以以八进制.十进制.十六进制和ASCII码来显示文件或者流,它们对于访问或可视地检查文件中不能直接显示在终端上的字符很有用.语法: od [-A 地址进制] [ ...
- 完美解决fixed 水平居中问题
群里的朋友问的,发现自己没写过:就写了下,原理和网上的fixed上下左右四个角的原理一样! 1.防止页面振动: body{ _background-image: url(about:blank); _ ...
- 【Qt】Qt之设置QWidget背景色【转】
简述 QWidget是所有用户界面对象的基类,这意味着可以用同样的方法为其它子类控件改变背景颜色. Qt中窗口背景的设置,下面介绍三种方法. 使用QPalette 使用Style Sheet 绘图事件 ...
- IOS_修改项目模板
1. /Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates/File\ Templates/Source/Cocoa\ ...
- 局域网实现 yum
1 安装squid代理 ##### . 安装squid yum -y remove squid yum -y install squid ##### . 修改配置文件 vi /etc/squid/sq ...
- 用golang启动一个daemon
用golang启动一个daemon package main import ( "fmt" "log" "os" "runtime ...
- Qt在VS2010的安装与配置
1. 下载Qt的安装包和VS2010的Qt插件 2. 安装Qt SDK 点击下载安装包,一路回车即可,主要注意Qt的安装路径最好安装在全英文路径而且中间没有空格, 安装好后,可以运行开始菜单里面的Qt ...
- 使用本地光盘安装Microsoft .NET Framework 3.5 for Win8.1/WinServer2012R2
.NET Framework 3.5 作为的SQL Server 2012的先决条件,假如使用图形化方式需要使用internet,对于服务器部署时缓慢的一点(需要下载后安装) 以下提供一个使用使用安装 ...
- java中封装
.什么是封装? 封装就是将属性私有化,提供公有的方法访问私有属性. 做法就是:修改属性的可见性来限制对属性的访问,并为每个属性创建一对取值(getter)方法和赋值(setter)方法,用于对这些属性 ...