Goforyouqp  

目录

步骤和解释:

示例程序:

代码解释:

十进制转化成二进制:

代码解释:


步骤和解释:

首先我们需要知道的是2的幂次方在二进制中都是只有一个1的:

2--------10
4--------100
8--------1000
16-------10000
32-------100000
-----------------

所以现在我们可以判断,如果二进制中只有一个1,其他位都是0,则这个数就是2的幂次方;

接着,我们使用这个数-1进行与计算,因为这个数如果是2的幂次方的话,n-1就是高位往下一位后所有位都是1,例如:

2------------10
2-1----------01

4------------100
4-1----------011

8------------1000
8-1----------0111

16-----------10000
16-1---------01111

然后我们使用与(&)进行按位与逻辑运算,使用按位与操作的时候,编译器会自动将十进制的数值转化成二进制,所以我们并不需要手动转化,:

2------------10
2-1----------01   10&01=0

4------------100
4-1----------011   100&011=0

8------------1000
8-1----------0111   1000&0111=0

16-----------10000
16-1---------01111   10000&01111=0

可见,如果数值是2的次方,则其n&(n-1)=0,我们可以使用一个不是2的次方进行反证,如果这个数值为15时:

15的二进制为:1111
则15-1=14的二进制为:1110
得出两个数值的按位与结果是:1110
可见得到的数值不是0

示例程序:

所以根据这个特性,可以编写程序进行验证:

#include <stdio.h>

int isPowerOfTwo(int num) {
    if (num <= 0) {
        return 0;  // 如果是小于等于0的数,直接返回false
    }
    return (num & (num - 1)) == 0;
}

int main() {
    int number;
    printf("Enter a number: ");
    scanf("%d", &number);

    if (isPowerOfTwo(number)) {
        printf("%d is a power of 2.", number);
    } else {
        printf("%d is not a power of 2.", number);
    }

    return 0;
}

代码解释:

在这个例子中,isPowerOfTwo函数接受一个整数作为参数,使用位运算判断该数是否是2的幂次方。具体的判断条件是`(num & (num - 1)) == 0`,这个条件表示num的二进制表示中只有一位是1,其他位都是0。

在main函数中,我们通过用户输入一个数,并调用isPowerOfTwo函数来判断该数是否是2的幂次方,然后输出相应的结果。

如果输入的数是2的幂次方,比如输入1、2、4、8等,输出结果会显示该数是2的幂次方;否则输出结果会显示该数不是2的幂次方。

虽然上面的代码示例中并不涉及十进制转化成二进制的问题,但是可以介绍一下十进制转化成二进制的方法:

十进制转化成二进制:

我们可以使用位运算的方式将一个十进制数转换成二进制数

#include <stdio.h>

void decimalToBinary(int num) {
    if (num == 0) {
        printf("0");
        return;
    }

    int binary[32];  // 用于存放二进制数的每一位
    int i = 0;

    while (num > 0) {
        binary[i] = num % 2;  // 取余得到二进制数的每一位
        num = num / 2;  // 更新num为除以2后的商
        i++;
    }

    // 倒序输出二进制数的每一位
    for (int j = i - 1; j >= 0; j--) {
        printf("%d", binary[j]);
    }
}

int main() {
    int number;
    printf("Enter a decimal number: ");
    scanf("%d", &number);

    printf("Binary representation: ");
    decimalToBinary(number);

    return 0;
}

代码解释:

在上述代码中,decimalToBinary函数用于将十进制数转换为二进制数。它通过不断地取余和整除2来获取二进制数的每一位,并将其存储在一个数组中。然后,通过倒序输出数组中的元素,即可得到该十进制数的二进制表示。

在main函数中,我们从用户输入获取一个十进制数,并调用decimalToBinary函数来进行转换并打印结果。

以输入的十进制数为例,输出结果将显示该数的二进制表示。例如,输入十进制数10,输出结果为二进制数1010。

posted on 2023-07-16 15:01  嵌入式小白-小黑  阅读(153)  评论(0编辑  收藏  举报  来源