判断一个数是否为2的整数次幂:
依据:任何满足2的整数次幂的数,其用二进制表示时肯定有且只有一个1,其它位上均为0
法一:(((a)&(a-1))==0)?1:0
Number | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
128 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
128-1=127 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
128 bitwise-AND 127 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
法二:(((a)&(-a))==a)?1:0
Number | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
4 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
-4(补码) | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 |
4&(-4) | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
输入一个数,如果是整数 ,输出1,非整数,输出0
#include <stdio.h>
#include <stdlib.h>
int main()
{
double a;
scanf("%lf",&a);
if(a==(double)(int)a) printf(";1");
else printf(";0");
}