No.10 運算子應用詳解
阿新 • • 發佈:2018-12-16
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 ;
}
以上三個題目可能對初學者來說比較難理解,初學者可以根據程式在稿紙上一步一步跟蹤和演算,便可以吃透。