【Leetcode】2的幂(整数的二进制形式,与运算)

class Solution {
public:
    bool isPowerOfTwo(int n) {
        if(n <= 0) return false;

        return (n&(n-1)) == 0;
    }
};

注:

1) 2的幂函数,其y值大于0;

2) 2的幂函数,若 x < 0, y = (0,1);

2)n&(n-1) == 0 和 (n&(n-1)) == 0 ,逻辑是不一样的。

原文地址:https://www.cnblogs.com/gdut-gordon/p/11438416.html

时间: 2024-11-01 20:42:37

【Leetcode】2的幂(整数的二进制形式,与运算)的相关文章

判断给定十进制整数的二进制形式中含有几个1

两种判断一个给定整数的二进制形式中含有几个1的简单方法: 主要思想是通过按位与(&)运算和位移运算(<< >>)实现 1 unsigned int_number( int n) 2 { 3 if (n < 0) 4 return; 5 unsigned count = 0; 6 while (n != 0) 7 { 8 if ((n & 1) != 0) 9 ++count; 10 n >>= 1; 11 } 12 return count; 13

Ex 2_25 n位十进制整数转换为二进制形式..._第四次作业

(a)   当n=1时,(10)d=(1010)b 当n=2时,(100)d=(10)d x (10)d=(1010)b x (1010)b 当n=4时,(10000)d=(100)d x (100)d=(1010)b x (1010)b x (1010)b x (1010)b - 因此z=pwr2bin(n/2) T(n)=T(n/2)+(cn/2)log23=>T(n)=O(nlog23) (b) 若十进制整数x的位数等于1,则返回binary[x] 假设位数为n(n>1且n为2的幂),则

【C/C++】获取整数的二进制形式字符串

思路 使用循环使整数左移i位,并取最高位,如果当前最高位为1则值为'1',否则为'0'.这样拼接出一个字符串. 注意:计算机中存储的是数字的补码. 关于正.负数的原码.反码.补码. 正数:原码.反码.补码都一样. 负数:反码(除了最高位,其它位取反)补码(反码+1) 为什么要存储补码,而不是原码? 为了统一运算方法.使用补码对有符号整数进行加.减不需要关心符号位. 例如:1 + (-2) = -1 -2的原码 1000 0000 0000 0000 0000 0000 0000 0010 -2的

每天一道算法题:数字二进制形式中1的个数

题目:请实现一个函数,属于一个整数,输出该数二进制表示中1的个数,例如把9表示成二进制是1001,有2位为1.因此如果输入9,该函数输出2. 可能的死循环陷阱 看完题目,相信大家很快就能想到一个解题思路:先判断整数二进制表示中最右边的一位是否为1,接着把输入的整数右移一位,此时原来处于从右边起的第二位被移动至最右边了,再判断是不是1,这样每次移动一位,直到这个整数变成0,即能够得到整数二进制表示形式中1的个数,而现在问题变为如何判断数字的最后一位为1,其实这个也很简单,只需要将数字与1做与运算,

将一个十进制数转为二进制形式并判断它是否是2的n次幂

java提供了十进制转化为二进制.十六进制.八进制的函数:在java.lang.Integer这个API包中,转换函数如下 public static String toBinaryString(int i) public static String toHexString(int i) public static String toOctalString(int i) 这3个函数都可以将十进制的整数转换成二.一六.八进制数,不过转换后的结果都是字符串的形式. 在这里介绍下转换为二进制的情况.

【输出一个整数的二进制存储形式】

// 输出一个整数的二进制存储形式void putBinary(int n){ int bits = sizeof(n) * 8; while (bits-->0) { printf("%d", n>>bits&1); if (bits%4==0) printf(" "); } printf("\n");}

获取内存中整数二进制形式

采用移位和相与方式求整数在内存中的二进制形式. #include<stdio.h> typedef int DataType; int num_covert_binary(DataType num); void main() { DataType num; num = -1; num_covert_binary(num); num = 12; num_covert_binary(num); getchar();//让console 等待一下 } int num_covert_binary(Da

C语言整数按照二进制逆序,输出逆序后的整数值

问题来源,今天早上和一舍友吃早餐的时候谈到的一个问题,将一个整数按照二进制逆序,然后输出逆序后的数值. 我们知道数值在内存中都是以二进制的形式存放的,假如我们是32位机,每8位为一个字节,int型在32位机上是占4个字节,即32位. 如   2  = 0000 0000 0000 0000 0000 0000 00000 0010(32位) 逆 ^2  = 0100 0000 0000 0000 0000 0000 00000 0000  (这里用^表示逆转) 那么这个操作要如何执行呢?首先补充

C语言将整数以二进制逆序

问题来源,今天早上和一舍友吃早餐的时候谈到的一个问题,将一个整数按照二进制逆序,然后输出逆序后的数值. 我们知道数值在内存中都是以二进制的形式存放的,假如我们是32位机,每8位为一个字节,int型在32位机上是占4个字节,即32位. 如   2  = 0000 0000 0000 0000 0000 0000 00000 0010(32位) 逆 ^2  = 0100 0000 0000 0000 0000 0000 00000 0000  (这里用^表示逆转) 那么这个操作要如何执行呢?首先补充