Sorun, bit maskesi için bir çift kullanmanız olabilir. Bence, özellikle de bir işaret biti, mantis ve 2 üsekten ibaret oldukları için, çiftler için çok anlam ifade etmiyorlar. Örneğin
, 8 >> 1 basitlik için işaretsiz iki bayt şamandıra hayal ve hayal, ilk bayt mantisi temsil eder 2.
bölme ile aynı güzel tutarlı işlemi olup 4'tür ve ikincisi (her ikisi de imzasız), sonra 7 * 2^4 (= 112) 0b00000111 00000100 olarak gösterilebilir. Eğer 1'i sağa kaydırırsanız, >> 1, bizim kongremize göre 0b00000011 10000010 alırsınız. şimdi 3 * 2^130. Bu tam olarak bir tamsayı sağa kaydırarak 2'ye bölünecek bir bölüm değil.
Derleyicim "hata: geçersiz işlenenleri ikiliye >> (çift ve imzasız)" numara.
Yani temelde şunu deneyebilirsiniz:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int hexa_number = 0;
unsigned num_bits = sizeof(int)*8;
unsigned bitmask = 1 << (num_bits - 1);
printf("Enter a number in hexadecimal form: ");
scanf("%i", &hexa_number);
unsigned k = 0;
unsigned num_ones = 0;
unsigned num_zeros = 0;
for(k = 0; k != num_bits; k ++)
{
if(hexa_number & (bitmask >> k))
{
printf("1");
num_ones ++;
}
else
{
printf("0");
num_zeros++;
}
}
printf("\nNumber of ones is %i\nNumber of zeros is %i", num_ones, num_zeros);
return 0;
}
herhangi bir yardım lütfen –
hiçbir 'C# printf' var çünkü C, değil C# olarak bu yeniden etiketlediğinizden ettik. –