用一个表达式,判断一个数X是否是2^N(2,4,8,16,…),不可用循环语句

用一个表达式,判断一个数X是否是2^N(2,4,8,16,…),不可用循环语句

答案:!(X & (X - 1))

分析:2^N(2,4,8,16)这样的数转化成二进制是10、100、1000、10000。

若X-1与X做与运算,结果是0,则X是2^N。

扩展:求一个整数的二进制形式中包含1的数量

 1 int func(int x)
 2 {
 3     int count = 0;
 4     while(x)
 5     {
 6         count ++;
 7         x = x & (x - 1);
 8     }
 9     return count;
10 }
时间: 2024-08-07 04:32:19

用一个表达式,判断一个数X是否是2^N(2,4,8,16,…),不可用循环语句的相关文章

c语言:实现一个函数,判断一个数是不是素数。

实现一个函数,判断一个数是不是素数. 程序: #include <stdio.h> #include <math.h> int prime(int num) //prime表示素数 { int i = 0; int k = 0; k = sqrt(num); for (i = 2; i <= k; i++) { if (num%i == 0) { return 0; } } return 1; } int main() { int num; int ret; printf(&

习题4 编写一个方法method(),判断一个数能否同时被3和5整除

编写一个方法method(),判断一个数能否同时被3和5整除 首先编写一个方法method(),由于是判断,所以返回的数据类型应是波尔型,并且向主方法传一个整数类型的参数X public class Zhawo11 { } public static boolean method(int x){ } } 接下来在子方法里判断,如果能同同时被3和5整除,就返回true,否则返回false public class Zhawo11 { public static void main(String a

判断一个数能否通过一个数组中的数相乘而得到(数组中的数使用次数不限)

题目:判断一个数能否通过一个数组中的数相乘而得到(数组中的数使用次数不限) 例如:第一行输入目标数x,第二行再输入一个数组(每个数用空格隔开),如果能则输出1,不能则输出-1: 输入例1: 20 2 3 5 7 输出: 1 解释:20 = 2*2*5,可以组成,所以输出1. 输入例2: 20 3 5 7 输出: -1 解释:无法组成,所以输出-1. 解题思路:转化成完全背包问题来解决(因为每个因子都可以使用无限次) #include <iostream> #include <bits/s

请编写一个程序,该程序可以接收两个数,并判断两个数是大于、小于、等于?

//作者:janushu //日期:2017/9/20 //功能判断两个数的大小 import java.io.*; public class CompareToNumDemo{ public static void main(String[] args){ try{ //输入流 从键盘上输入一个数 InputStreamReader isr = new InputStreamReader(System.in); //缓存读取一个数 BufferedReader br = new Buffere

vuex中filter的使用 &amp;&amp; 快速判断一个数是否在一个数组中

vue中filter的使用 computed: mapState({ items: state => state.items.filter(function (value, index, arr) { return index < 5 }) }), 如上所示,对于vuex,我们在使用mapState获取state时, 可以使用filter来过滤其中的元素,在filter的回调函数中接受三个参数,第一个是value,即每一个元素的值: 第二个是index, 即每一个元素所在的index, 第三个

Java基础——使用三元运算符判断一个数的奇偶性

要求: 使用三元运算符判断一个数的奇偶性 实现代码: /** * 使用三元运算符判断用户输入的一个数的奇偶性 */ import java.util.Scanner; public class Odd_even { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("请输入一个整数:"); long num1 = input.nextLo

linux-shell脚本编程-变量-算术表达式-判断语句-if分支语句

bash工作特性:    1.支持命令历史.命令补全    2.支持管道.重定向    3.支持命令别名    4.支持命令行编辑    5.支持命令行展开     6.支持文件名通配    7.支持使用变量    8.支持编程命令编辑:光标跳转:ctrl+a:跳到命令行首  home            ctrl+e:跳到命令行尾  end            ctrl+u:删除光标至命令行首的内容            ctrl+k:删除光标至命令行尾的内容             ct

Linux下的shell脚本编程-变量-算术表达式-判断语句-if分支语句

Linux下的shell脚本编程-变量-算术表达式-判断语句-if分支语句 一:实验环境 1):虚拟机 2):linux系统 二:实验目标 1): shell 基本语法 2):变量 3):表达式 4):判断语句 5): if表达式 三:实验脚本 第一块 一个简单的shell脚本程序 [[email protected] ~]# mkdir test [[email protected] test]# vim example1.sh #!/bin/bash #This is to show wha

快速判断一个数是否是4的幂次方,若是,并判断出来是多少次方!

将4的幂次方写成2进制形式后,很容易发现有个特点,2进制中只有1个1(1在奇数位置),并且后面跟了偶数个0:因此问题可以转化为判断1后面是否跟了偶数个0就可以了. 4的整数次幂的二进制可以写为2^(2*n),即也可以写成2的幂次方,当然就满足2的幂次方的条件,即num&(num-1)==0. 思路:首先用条件num&(num-1)==0来判断是否为2的幂次方,若不满足,则不是.若满足,再用条件num&0x5555 5555 来判断,若为真,则这个整数是4 的幂次方.否则不是. #i