操作符(移位操作)
阿新 • • 發佈:2019-01-13
1.寫一個函式返回引數二進位制中 1 的個數
比如: 15 0000 1111 4 個 1
程式原型:
int count_one_bits(unsigned int value)
{
// 返回 1的位數
}
將引數與1按位與,若結果為一,用一個引數記錄,
最後返回記錄引數。該引數即為所求。
#include<stdio.h> #include<stdlib.h> int count_one_bits(unsigned int value) { int i = 0; int count = 0;//計數 for(i=0; i<32; i++) { if( ((value>>i)&1) == 1 ) count++; } return count; } int main() { int value = 0; printf("請輸入數字\n"); scanf_s("%d",&value); printf("%d\n",count_one_bits(value)); system("pause"); }
2.獲取一個數二進位制序列中所有的偶數位和奇數位,
分別輸出二進位制序列。
先定義一個數組,再將輸入的數按位與1與,將結果給陣列(即將其轉化為一個二進位制數),最後將陣列的奇數和偶數位輸出,即為所輸入數的二進位制奇數,偶數數列。
int arr[32] = { 0 }; int main() { int number = 15; printf("請輸入二進位制序列\n"); scanf_s("%d",&number); for (int i = 0; i < 32; i++) { int b = 0x1; if ((number >> i)& b) { arr[i] = 1; } else { arr[i] = 0; } } for ( int i = 31; i > 0;i = i - 2) { printf("%d",arr[i]); } printf("\n"); printf("上面是偶數列,下面是奇數列\n"); for (int i = 30; i >= 0; i = i - 2) { printf("%d", arr[i]); } printf("\n"); system("pause"); }
3 輸出一個整數的每一位。
用函式的遞迴,每一次都將其%10.並輸出。
#include<stdio.h> #include<stdlib.h> int cout(int num) { if (num < 10) return num; else { int n = 0; n = num % 10; printf("%d\n",n); cout(num / 10); } } int main() { int a = 123; printf("請輸入一個整數\n"); scanf_s("%d",&a); printf("%d\n",cout(a)); system("pause"); }
4.程式設計實現:
兩個int(32位)整數m和n的二進位制表達中,有多少個位(bit)不同?
輸入例子:
1999 2299
輸出例子:7
將倆個數按位異或,然後在將得到的數與1按位與。得出結果中1的個數
就是這倆個整數不通位的個數
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a = 0;
int b = 0;
int c = 0;
printf("請輸入倆個數\n");
scanf_s("%d",&a);
scanf_s("%d",&b);
for (int i = 0; i <= 32;i++)
{
if ((((b ^ a) >> i) & 0x1) == 1)
c++;
}
printf("%d\n",c);
system("pause");
}