程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> 關於C >> C語言中移位、邏輯運算符的簡單應用

C語言中移位、邏輯運算符的簡單應用

編輯:關於C
&運算符 一、 計算二進制中1 的個數比如: 15       0000 1111       4 個 1 要求其數字的存儲方式為int   int count_one_bits(unsigned int value)//計算1的位數函數 {     int count;     count=0;     while(value)     {         count++;         value=value&(value-1);//每&一次,減少一個二進制數中的“1”的個數;     }     return count; }   &運算符和>>運算符的聯合應用 二、獲取一個數二進制序列中所有的偶數位和奇數位,分別輸出二進制序列。   #include <stdio.h> #include <stdlib.h> int main() { int i,j; int num;//定義輸入變量 int a[16],b[16];//定義存放奇數位和偶數位的數組 printf("請輸入一個十進制數字:"); scanf("%d",&num); for (i = 0 ,j = 0; j < 32; i++, j=j+2) //獲取二進制數列的奇數位 { a[15-i] = ( num>>j )&1; } printf("從高位到低位奇數位分別為:"); for (i = 0; i < 16; i++) //從高位到低位輸出其二進制奇數位 { printf("%d ",a[i]); }   for (i = 0 ,j = 1; j < 32; i++, j=j+2) //獲取二進制數列的偶數位 { b[15-i] = ( num>>j )&1; } printf("\n從高位到低位偶數位分別為:"); for (i = 0; i < 16; i++) //從高位到低位輸出其二進制偶數位 { printf("%d ",b[i]); } system("pause"); return 0; }  | 運算符   三、判斷名次是否連續 /*將名次對應一個數中的二進制位*/  
int ret = 0, flag = 0;
ret |= (1 << (a - 1));
ret |= (1 << (b - 1));
ret |= (1 << (c - 1));
ret |= (1 << (d - 1));
ret |= (1 << (e - 1));
while (ret)
{
    if (0 == ret % 2)
    {
        flag = 1;
    }
    ret / = 2;
}
if (0 == flag)
{
    printf("比賽的名次為:\n");
    printf("a=%d\nb=%d\nc=%d\nd=%d\ne=%d\n", a, b, c, d, e);
}


四、尋找兩個int(32位)整數m和n的二進制表達中,有多少個位(bit)不同

int different_bits(int num_1, int num_2)
{
    int count = 0;
    for (int i = 0; i < 32; i++)
    {
        if (((num_1 >> i) & 1) ^ ((num_2 >> i) & 1))
        {
            count++;
        }
    }
    return (count);
}

 

  五、將一個無符號數的二進制數逆置   unsigned int  reverse_bit(unsigned int num) {     int i = 0;     unsigned int ret = 0;    for (i = 0; i < 32; i++)     {         ret<<=1;         ret |= ((num >> i) & 1);     }     return (ret); }   六、求兩個數的平均值,無溢出   int average(int a, int b) {     return((a & b) + ((a ^ b) >> 1)); }   七、找出一組數據中單獨出現的數字   int find_only(int arr[], int size) {     for (int i = 1; i < size; i++)     {         arr[0] ^= arr[i];     }     return (arr[0]); }  
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved