当前位置:首页 » 编程语言 » c语言判断是否为2的整数幂
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言判断是否为2的整数幂

发布时间: 2023-05-13 06:34:56

Ⅰ x&(x-1)"yes":"no" 这句表达式能判断x是否是一个2的幂么

你写的表达式想判断的话还差点就是把后边的yes和no交换位置
即:x&(x-1)?"no":"yes";
位运算
这个其实并不难,
你听我说
几句:
首先来看几个数,这几个数不大,都是10以内的,我们看看它们对应的
二进制数
是啥
0——0
1——1
2——10
3——11
4——100
5——101
6——110
7——111
8——1000
9——1001
========================================================
就写这些吧,所谓“位”就是二进制数的个数。比如1是一位的,
2和3是两位的,4,5,6,7是三位的,9是四位的
位运算就是“按位进行的运算”,就是对说二进制的段吵每一个“位”分别进行一种“运算”
位运算中没有什么加减乘除,只有
逻辑运算
,即“与,或,非,
异或态燃禅
”等
c语言
“位与”的符号为&
“位或”为|
“位非”

~
“位异或”为^
规则是这样的:“与”是只有同为1时为1
“或”是只要有一个为1,结果就为1

非就是
取反
,1变0,0变1

异或为两数相同结果为0,两数不同结果为1
=========================================================
基础知识大概就这些,那来看看x&(x-1)
这个表达式为啥能判断是不是
2的幂
:
回过头先去观察一下
我上边写的几个数对应的二进制吧,
重点到1,2,4,8
它们都是2的整数
次幂
不难看出1是0位与1位的分界线

2

1位与2位的分界线
4

2位与3位的分界线
8

3位与4位的分界线
由此不难推出
2的整数次幂都是“分界线”。
分界线可好哟,这说明分界线的数
减去1后
它所对应的二进制数就少了1位
比如8(1000)
减去1,变成7(111)
,从4位变成3位了
为了把7凑成跟8一样的4个二进制位
,帆尘我们在前边补0
就是
7(0111)
此时,8&7
,进行位与运算,由于4个二进位都是1和0的与,结果为
0000
而8是2的整数次幂
,而x&(x-1)为0,
所以表达式x&(x-1)?"no":"yes";
应该取yes
这也证明了这个表达式的正确性。
===========================================================
楼主可自己拿7,6,5
试下
肯定结果不是0
因为它们的“位数”
相同
最高位又都是1
所以肯定结果中会有1的存在,结果不可能是0,所以
x&(x-1)?"no":"yes";
应该取得no
而4,2
它们运算后的结果和8一样,也是0.
综上,表达式x&(x-1)?"no":"yes";
可以判断x是否是一个2的幂

Ⅱ c语言题 判断输入的整数是否是2或3或4的倍数

scanf("%a",&a);
这个里面改成%d,你输入进去的数字是整形的,%a还没有这种类型的数据
想无限循环这样就可以了
while(true)
{
printf("输入一个整数:");
scanf("%d",&a);
if (0==a%2||0==a%3||0==a%4){
printf("是2或3或4的倍数\n");
}
}

Ⅲ C语言判断一个数是否是2的幂次方或4的幂次方

#include<stdio.h>
#include<math.h>

intmain()
{
inta,i,b=1;
printf("请输入一个吵盯数 ");
scanf("%d",&a);
for(i=1;b<=a;i++)
{
b*=2;
if(a==b)break;
}

if(a!=b)printf("不是倍数");//不是2的次方
elseif(i%2==0)printf("4倍数");液枝//2的偶数次方是4的倍数
升埋和elseprintf("2倍数");//2的奇数次方是2的倍数

return0;
}

Ⅳ c语言中怎样表示2的n次方

C语言中计算一个数的N次方可以用库函数pow来实现。 函数原型:double pow(double x, double y); 功 能:计算x^y的值 返 回 值:

Ⅳ c语言中2的n次方怎么表示

C语言有函数,需要头文件#include <math.h> 用pow(2,n)就可以表示2的n次方。

C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。

尽管C语言提供了许多低级处理的功能,但仍然保持着跨平台的特性,以一个标准规格写出的C语言程序可在包括类似嵌入式处理器以及超级计算机等作业平台的许多计算机平台上进行编译。

(5)c语言判断是否为2的整数幂扩展阅读:

C语言是一门面向过程的计算机编程语言,与C++、Java等面向对象编程语言有所不同。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、仅产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。C语言描述问题比汇编语言迅速、工作量小、可读性好、易于调试、修改和移植,而代码质量与汇编语言相当。

当前阶段,在编程领域中,C语言的运用非常之多,它兼顾了高级语言和汇编语言的优点,相较于其它编程语言具有较大优势。计算机系统设计以及应用程序编写是C语言应用的两大领域。同时,C语言的普适较强,在许多计算机操作系统中都能够得到适用,且效率显着。

Ⅵ c语言程序设计 求2的N次方

#include<stdio.h> //前两行都是头文件
#include<stdlib.h>
int main()//定义主函数
{
int n,a;//定义整型变量n表示次方,a用于循环函数
int power=1;//定义整形变量power,也就是最终的结果,所以你手动输入n的时候不要太大
printf("Please enter n:");//运行时会出现一行字提示你输入N
scanf("%d",&n);//程序扫描你输入的n
for(a=0;a<n;a++)//for函数循环计算结果
{
power=power*2;
}

printf("%d\n",power);//输出结果
return 0;
}

我现在的电脑上没有软件,你运行看看,有error就追问,我来改

Ⅶ 一语句实现x是否为2的若干次幂的判断,用C语言,或汇编。。多谢啊

这个很简单大辩厅
其实就是位运算。
#include <stdio.h>
int main( )
{
int x;
scanf("%d", &x);
if ( x & ( x - 1 ) == 0 )
printf("是2的幂"灶尺);
else printf("不是2的幂"滚隐);
return 0;
}

Ⅷ 给出一行C语言表达式,判断给定的整数是否是一个2的幂

一个数n
若(n&(n-1))==0则n是2的幂

Ⅸ 如何用C语言实现2的n次方

以上各位都对,但有更简单的
直接将1左移n位就好了,效率也更高
int n= 10;
unsigned int x = 1<<n;
但要注意直接计算2的n次方很容易溢出,比如直接左移以及直接乘都要求小于32次方,还得是x声明为unsigned的前提下,否则最多能左移16位,超过之后就溢出了
如果要实现超过32次方,需要定义为更大的数据类型,或者直接用字符数组存储,实现大整数的运算

Ⅹ C语言,按位与为0,为什么就是2的N次方

因为i = (i - 1) + 1
所以如果 i 是2的N次方的时候,悄备那么i的最高位为1,其他位为0,而i-1的最高位局贺为0,其他位为1,所以,i & (i - 1) 后就为启腊毁0

1000 & 0111 = 0 (8&7=0)