-3

以下のコードは、すべて 0 を表示します。理解できない。私のロジックに従って、適切に表示する必要があります。私は何が欠けていますか?

#include <stdio.h>
void displayInBıtFormat(int);
int i, value;

int main(void){

puts("Enter an integer");
scanf("%d",&value);

printf("\n%d's bit representation is: ",value);
displayInBıtFormat(value);

getch();

}

void displayInBıtFormat(int val){

int mask=1<<15;

for (i = 0; i < 16; i++)
{
    if (val&mask==1)
    {
        printf("1");
    }
    else
    {
        printf("0");
    }

    if ((i+1)%8==0)
    {
        printf(" ");
    }

    val<<1;
}

}
4

2 に答える 2

4

これ:

if (val&mask==1)

bitwise-and の結果は、ビット 0 (最下位ビット) を見ているときにのみ 1 になります。

次のように変更します。

if (val & mask)

それで十分です。完全に正しいです。

また、コメントで指摘されているように、これは次のとおりです。

val << 1;

結果の値を捨てている場合は、次のものが必要です。

val <<= 1;
于 2013-10-30T10:05:14.337 に答える
2

この比較val&mask==1は正しくありません。私たちが持っている場合はi=1<<15i&mask1つではありませんが1<<15. ビット単位&では、両方のオペランドが持つすべての位置に 1 を持つ整数が生成されるため1、結果の 1 つは 15 位になることに注意してください。if (val&mask != 0)または短くすることができますif (val&mask)

于 2013-10-30T10:05:10.980 に答える