1. 程式人生 > >No.10 運算子應用詳解

No.10 運算子應用詳解

C語言中的&,||,&&,^用法可謂靈活多樣,掌握了這些運算子的用法,可以大大提高程式設計效率,尤其涉及到二進位制位的程式設計,其優點將會更加淋漓盡致地發揮出來。 直接上程式碼:

1.輸入一個十進位制數,返回它的二進位制序列中"1"的個數。
方法1//將value值和1進行相與,若結果為1,則計數器加1.再將value整體右移,迴圈32次,使每一位都和1相與。
#include <stdio.h>

int Count_One_bits(int value) 
{
	int count = 0 ;
	int i = 0 ;
	for(i=0; i<32; i++
) { if ((value & 1) == 1) { count++ ; } value >>= 1 ; } return count ; } int main() { int value = 0 ; int ret = 0 ; printf("請輸入一個數字: ") ; scanf("%d", &value) ; ret = Count_One_bits(value) ; printf("1的位數為: %d\n", ret) ; return 0 ; } 方法2//此方法是將value和(value-1)進行按位與,直到value變成0。
#include <stdio.h> int Count_One_bits(int value) { int count = 0 ; while (value) { value = value & (value-1) ; count++ ; } return count ; } int main() { int value = 0 ; int ret = 0 ; printf("請輸入一個數字: ") ; scanf("%d", &value) ; ret = Count_One_bits(value) ; printf("1的位數為: %d\n"
, ret) ; return 0 ; }
2.返回一個數二進位制的奇數和偶數序列。

#include <stdio.h>

void Get_binary_bits(int n) 
{
	int i = 0 ;
	printf("偶數序列為: ") ;

	for(i=31; i>0; i-=2)  //把偶數位分別右移到最後和進行與操作
	{
		printf("%d " ,((n>>i) & 1)) ;
	}

	printf("\n") ;
	printf("奇數序列為: ") ;

	for(i=30; i>=0; i-=2)//把奇數位分別右移到最後和進行與操作
	{
		printf("%d " ,((n>>i) & 1)) ;
	}
	printf("\n") ;

}
int main()
{
	int value = 0 ;
	printf("請輸入一個十進位制數字: ") ;  
	scanf("%d", &value) ;
	Get_binary_bits(value) ;
	return 0 ;
}

3.判斷二進位制序列有多少位不同。
//1.將兩個數字分別右移i位,與1相與,判斷是不是相等;
//2.也可以直接使用異或操作符並設計計數器來計算;
//3.還可以將兩個數異或之後,再將異或的結果ret進行 ret&(ret -1),計數器加1,設個while迴圈,直到ret為0,返回計數器的值
方法1.#include <stdio.h>

int Cal_diff_binary_bits(int m, int n)
{
	int count = 0 ;
	int i = 0 ;
	for(i=0; i<32; i++)
	{
		if ((m>>i & 1)   !=  (n>>i & 1))
			count++;
	}
	return count ;
}

int main()
{
	int value1 = 0 ;
	int value2 = 0 ;
	int ret = 0 ;
	printf("請輸入兩個十進位制數字: ") ;
	scanf("%d%d", &value1, &value2) ;
	ret = Cal_diff_binary_bits(value1, value2) ;
	printf("其二進位制序列有%d位不同\n", ret) ;
	return 0 ;
}

方法2. #include <stdio.h>

int Cal_diff_binary_bits(int m, int n)
{
	int count = 0 ;
	int i = 0 ;
	int ret = 0 ;
	ret = m^n ;
	for(i=31; i>=0; i--)
	{
		if ((ret>>i) & 1 ==1)
			count++;
	}
	return count ;
}

int main()
{
	int value1 = 0 ;
	int value2 = 0 ;
	int ret = 0 ;
	printf("請輸入兩個十進位制數字: ") ;
	scanf("%d%d", &value1, &value2) ;
	ret = Cal_diff_binary_bits(value1, value2) ;
	printf("其二進位制序列有%d位不同\n", ret) ;
	return 0 ;
}

方法3. #include <stdio.h>

int Cal_diff_binary_bits(int m, int n)
{
	  int ret = 0 ;
	  int count = 0 ;
	  ret = m^n;
	  while(ret)
	  {
		  ret = ret & (ret-1) ;
		  count++ ;
	  }
	  return count ;
}

int main()
{
	int value1 = 0 ;
	int value2 = 0 ;
	int ret = 0 ;
	printf("請輸入兩個十進位制數字: ") ;
	scanf("%d%d", &value1, &value2) ;
	ret = Cal_diff_binary_bits(value1, value2) ;
	printf("其二進位制序列有%d位不同\n", ret) ;
	return 0 ;
}

以上三個題目可能對初學者來說比較難理解,初學者可以根據程式在稿紙上一步一步跟蹤和演算,便可以吃透。