# Bit Manipulation# ZeroJudge

f672 - FJCU_109_Winter_Day1_Lab1 數字轉二進位

🔗 前往 ZeroJudge 原題

題目描述

題目要求判斷給定的整數 N 的二進位表示中,從低到高第 M 位是 0 還是 1。

解題思路

題目要求檢查特定位元的值,最有效率的方法是使用位元運算。具體來說,我們使用左移運算符 << 建立一個掩碼,該掩碼在第 M 位上設置為 1,其餘位元為 0。然後,我們使用位元 AND 運算符 & 將 N 和掩碼進行 AND 運算。如果結果不為 0,則表示 N 的第 M 位為 1;否則,第 M 位為 0。由於題目要求輸出 0 或 1,因此可以使用條件判斷式 (!(n&1<<(m-1))==0) 來輸出結果。

複雜度分析

  • 時間複雜度: O(1)
  • 空間複雜度: O(1)

程式碼

#include <stdio.h>
int main(){
	int n,m;
	while(scanf("%d%d",&n,&m)>0)
		printf("%d\n",(!(n&1<<(m-1))==0));
}

Discussion