Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

พลังของสองในC


สมมติว่าเรามีตัวเลข n เราต้องเช็คว่าเป็นเลขยกกำลัง 2 หรือเปล่า เท่ากับ n =16 ผลลัพธ์จะเป็นจริง ถ้า n =12 มันจะเป็นเท็จ

เพื่อแก้ปัญหานี้ เราจะใช้การดำเนินการทางตรรกะ หากเราเห็นตัวเลขที่เป็นกำลังของสอง ในการแทนค่าไบนารีของตัวเลขนั้นจะเป็น MSb คือ 1 และบิตอื่นๆ ทั้งหมดจะเป็น 0 ดังนั้นหากเราดำเนินการ [n AND (n – 1)] ค่านี้จะกลับมา 0 ถ้า n เป็นกำลังของ 2 หากเราเห็น n =16 =10000 ในรูปเลขฐานสอง (n – 1) =15 =01111 ในเลขฐานสอง ดังนั้น 10000 AND 01111 =00000 =0

ตัวอย่าง (C)

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

#include <stdio.h>
#include <math.h>
#define MAX 20
bool isPowerOfTwo(int n){
   return(n>0 && !(n & (n-1)));
}
int main() {
   printf("%s\n", isPowerOfTwo(16) ? "true" : "false");
   printf("%s\n", isPowerOfTwo(12) ? "true" : "false");
   printf("%s\n", isPowerOfTwo(1) ? "true" : "false");
   printf("%s\n", isPowerOfTwo(32) ? "true" : "false");
   printf("\n");
}

อินพุต

16
12
1
32

ผลลัพธ์

true
false
true
true