سؤال

أكتب برنامجًا جديدًا يقارن 2 من عدد صحيحين غير موقعة. يقارن عن طريق المسافات hamming. لكن خوارزمية لا تعمل بشكل مثالي. هل يمكن أن تخبرني ما هو الخطأ في هذا الرمز :( شكرًا جزيلاً !!

هذه هي طريقة العد الخاصة بي ؛

int countHammDist(unsigned int n, unsigned int m)
{
int i=0;
unsigned int count = 0 ;
for(i=0; i<8; i++){
if( n&1 != m&1 ) {
    count++;
    }
n >>= 1;
m >>= 1;

}
return count;
}

ثنائيات A و B 8 بت.

 PrintInBinary(a);
 PrintInBinary(b);

 printf("\n %d", countHammDist(a,b));

اسمحوا لي أن أريكم الإخراج.

Enter two unsigned integers (0-99): 55 64
Your choices are 55 and 64
Number A: 00110111
Number B: 01000000
Hamming distance is ; 5
هل كانت مفيدة؟

المحلول

ضع بجنون العظمة حول N & 1 و M & 1.

if ((n&1) != (m&1))

http://eadeone.com/f7kyzg

هذا لأنه! = قبل و: http://www.swansontec.com/sopc.html

نصائح أخرى

تحتاج إلى التحول m أيضا لمقارنة البتات الصحيحة.

وتحتاج إلى تحويلها بغض النظر عما إذا كان اختبار المساواة يمر. (حرك التحولات خارج الداخلية } )

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top