- 文章主題:求兩個數(shù)二進制中不同位的個數(shù)??
- 所屬專欄:C語言每日一題??
- 作者簡介:每天不定時更新C語言的小白一枚,記錄分享自己每天的所思所想????
- 個人主頁:[?]的個人主頁????
前言
編程起因
最近剛學位操作符以及二進制碼的相關知識,于是想出了求兩個數(shù)二進制中不同位的個數(shù)這道題加深一下自己對于這方面的理解。
項目介紹
設計了一個求兩個數(shù)二進制中不同位的個數(shù)的項目。
設計思路
1.整體邏輯
方法一用常規(guī)做法每一位進行比較不同計數(shù)器就加一來得出兩二進制位種不同位的個數(shù),方法二則是利用按位與的特性(不同位相異則該位為其兩位的差值1,相同也是為兩位的差值0,原理類似于數(shù)學中的按位求絕對值在賦值到該位上??),再用C語言每日一題第3天的知識(Count_1()函數(shù)設計),調(diào)用那個函數(shù)的三種方法之一,或者自己再在該項目中設計出那三種方法,即可對該題進行完美求解。
2. 具體邏輯
與代碼展示中的邏輯相同這里不作過多解釋。
代碼展示
方法一 :遍歷兩二進制碼位來比較不同(常規(guī)做法)
#include <stdio.h>
int main()
{
int n1 = 0, n2 = 0;
printf("Please enter two numbers:\n");
scanf("%d%d", &n1, &n2);
int count = 0;
for (int bits = 0; bits <= 32; bits++)
{
if (((n1 >> bits) & 1) != ((n2 >> bits) & 1))//遍歷二進制碼位數(shù)
//比較兩位是否不同
{
count++;//如若不同則計數(shù)器加一
}
}
printf("The number of different bits in two binary sequences:\n");
printf("%d", count);
return 0;
}
方法二 :巧用異或(難度較高)
#include <stdio.h>
int main()
{
int n1 = 0, n2 = 0, n = 0;
printf("Please enter two numbers:\n");
scanf("%d%d", &n1, &n2);
n = n1 ^ n2;//按位異或,將兩二進制碼位按位異惑,不同位按位與后會變成
//1相同位則為0,再用第3天的Count_1()函數(shù)的方法計算出每
//位中1的個數(shù)(所以用這種方法的話實際上還可以劃分出同
//一思路不同取1做法的3種小方法,讀者可自行去結合第3天
//Count_1()的做法遷移運用一下,在這不作過多贅述)
int count = 0;
for (int bits = 0; bits <= 32; bits++)//計算1的方法:第3天Count_1()
// 函數(shù)方法一
{
if (((n >> bits) & 1) == 1)
{
count++;
}
}
printf("The number of different bits in two binary sequences:\n");
printf("%d", count);
return 0;
}
效果展現(xiàn)
文章來源:http://www.zghlxwxcb.cn/news/detail-731812.html
結語
以上就是我對求兩個數(shù)二進制中不同位的個數(shù)這個項目的解題思路,代碼以及效果展示,希望對你的C語言學習有所幫助!作為剛學編程的小白,可能在一些設計邏輯方面有些不足,歡迎評論區(qū)進行指正!看都看到這了,點個小小的贊或者關注一下吧(當然三連也可以~),你的支持就是博主更新最大的動力!讓我們一起成長,共同進步!文章來源地址http://www.zghlxwxcb.cn/news/detail-731812.html
到了這里,關于C語言每日一題(5):求兩個數(shù)二進制中不同位的個數(shù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!