PDA

View Full Version : به دست آوردن تعداد اختلاف بیت ها



shojaei_moh
سه شنبه 10 اردیبهشت 1392, 10:13 صبح
سلام بر دوستان
برنامه ای می خوام که اختلاف بیت ها رو بهم بگه تو خروجی مثلا 1111 و 0000 که در هر چهار بیت با هم اختلاف دارند یا عدد 110 و عدد 111 که در یک بیت اختلاف دارند از همه کسانی که بتونند کمک کنند ممنون میشم
با تشکر

hadi0x7c7
سه شنبه 10 اردیبهشت 1392, 13:07 عصر
این یه مدلشه :
#include <iostream>
#include <vector>
#include <string>

using namespace std;

int main() {
int m, n;
cin >> m >> n;


int p = m ^ n;
int count = 0;
while(p) {
if(p & 1)
count++;
p>>=1;
}

cout << count << endl;
}

امیدوارم کمک منه !

shojaei_moh
پنج شنبه 12 اردیبهشت 1392, 20:44 عصر
سلام
من این شرطی while رو متوجه نمیشم هر چی تریس می کنم امکان داره توضیح بدی
با تشکر

hadi0x7c7
جمعه 13 اردیبهشت 1392, 00:39 صبح
شما اول اون دو عدد رو باهم xor میکنی ، بعد اگر در هر بیتی اختلاف باشد توی عدد حاصل 1 داریم بعد مییاییم ای عدد رو در هر بار به سمت راست شیفت میدیم و با 1 and میکنیم اگر حاصل 1 شد که یعنی توی این بیت اختلاف داشتیم و count رو یکی اضاف میدهیم و همین کار را ادامه میدیم تا در نهایت عددمون صفر بشه (و از شرط بیرون میاییم) که تمامیم الته باید حواسمون باشه رو unsigned کار کنیم و گرنه خدا میدونه چی میشه !

Ananas
جمعه 13 اردیبهشت 1392, 09:25 صبح
لته باید حواسمون باشه رو unsigned کار کنیم و گرنه خدا میدونه چی میشه !
چیزی نمیشه. تو هر دو حالت با علامت و بدون علامت فرقی نداره.