ビットマスクには2倍の値を使用している可能性があります。私は二重については特に意味がありません。なぜなら、それらが符号ビット、仮数および2 ^指数で構成されているからです。例えば
、我々は簡単にするため、符号なし2台のバイトフロートを想像すると、最初のバイトが仮数を表すことを想像する場合>> 1 8 2
除算と同様、いい一貫した操作であると4です。 2番目の指数(両方とも符号なし)の場合、7 * 2^4(= 112)は0b00000111 00000100として表すことができます。その1を右に>> 1移動すると、0b00000011 10000010が得られます。これは、 3 * 2^130になりました。浮動小数点をビットシフトしてみると、私のコンパイラは "エラー:2進数に無効なオペランド(2進数と符号なし)"というエラーを出します。数。
だから、基本的に次のことを試みることができる:
#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;
}
任意のヘルプしてください –
のC#には、 'printf'はありませんので、私はCではなく、C#のようにこれを再びタグ付けしました。 –