寫一個函式返回引數二進位制中1的個數+獲取一個數二進位制序列中所有的偶數位和奇數位,分別輸出二進位制序列+輸出一個整數的每一位+兩個int(32位)整數m和n的二進位制表達中,有多少個位(bit)不同
阿新 • • 發佈:2018-11-28
寫一個函式返回引數二進位制中 1 的個數
比如: 15
0000 1111
4 個 1
#include <stdio.h> #include <windows.h> /* 寫一個函式統計一個數二進位制形式下 1 的個數 */ //統計 1 的個數 int Count_One_Bits(unsigned int value) { int count = 0; unsigned int num = value; for (int i = 0; i < 32; ++i) { if ((num & 1) == 1) { ++count; } num /= 2; } return count; } main() { printf("%d\n", Count_One_Bits(15)); system("pause"); return 0; }
獲取一個數二進位制序列中所有的偶數位和奇數位,
分別輸出二進位制序列。
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <windows.h> /* 獲取一個整數的偶數位和奇數位 分別輸出他們的二進位制形式 */ //定義陣列下標 #define SIZE 10 //寫一個用來儲存各個位數的函式 void Preserve(int num_size, int even_digit[], int odd_digit[]) { int num_count = 0; int num_tmp = num_size; while (num_tmp) { ++num_count; num_tmp /= 10; } num_tmp = num_size; int i1 = 0; //偶數位陣列的下標 int i2 = 0; //奇數位陣列的下標 for (int i = 0; i < num_count; ++i) { if (num_tmp % 10 % 2 == 0) { even_digit[i1] = num_tmp % 10; ++i1; } else { odd_digit[i2] = num_tmp % 10; ++i2; } num_tmp /= 10; } } //寫一個輸出二進位制數的函式 void Print_Binary(int digit[], int size) { for (int i = 0; i < size; ++i) { int tmp = digit[i]; if (tmp != 0) { printf("%d:", tmp); for (int j = 0; j < 32; ++j) { printf("%d", tmp & 0x1); tmp /= 2; } printf("\n"); } } } int main() { int num = 0; printf("請輸入一個整數:"); scanf("%d", &num); int even_digit[SIZE] = { 0 }; int odd_digit[SIZE] = { 0 }; Preserve(num, even_digit, odd_digit); printf("偶數位的二進位制表示:\n"); Print_Binary(even_digit, SIZE); printf("奇數位的二進位制表示:\n"); Print_Binary(odd_digit, SIZE); system("pause"); return 0; }
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <windows.h> /* 輸出一個整數的每一位 */ //寫一個輸出一個整數每一位的函式 //從低位到高位輸出 void Print_Digit(int value) { int num = value; //隨時修改運算元的值 while (num) { printf("%d ", num % 10); num /= 10; } printf("\n"); } //從高位到低位輸出 void Print_Digit_R(int value) { if (value > 9) { Print_Digit_R(value / 10); } printf("%d ", value % 10); } int main() { int num = 0; printf("請輸入一個整數:"); scanf("%d", &num); printf("這個數從低位到高為的數為:"); Print_Digit(num); printf("從高位到低位的數為:"); Print_Digit_R(num); printf("\n"); system("pause"); return 0; }
兩個int(32位)整數m和n的二進位制表達中,有多少個位(bit)不同
輸入例子:
1999 2299
輸出例子:7
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <windows.h>
/*
兩個int(32位)整數m和n的二進位制表達中,有多少個位(bit)不同
輸入例子:
1999 2299
輸出例子:7
*/
//寫一個判斷多少位不同的函式
int Different_Digit(int m, int n) {
int tmp_m = m;
int tmp_n = n;
int count = 0;
for (int i = 0; i < 32; ++i) {
if (((tmp_m & 0x1) ^ (tmp_n & 0x1)) == 1) {
++count;
}
tmp_m /= 2;
tmp_n /= 2;
}
return count;
}
int main() {
int m = 0;
int n = 0;
printf("請輸入兩個整數\n");
scanf("%d %d", &m, &n);
printf("他們二進位制表示式中,不同的位有 %d 個\n", Different_Digit(m, n));
system("pause");
return 0;
}