Ⅰ 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)