0

我觉得我的这项任务即将结束,但不明白为什么它只能每隔一段时间才能正常工作。如果我输入“FFFFFFFF”,我的程序会打印出来:

0xFFFFFFFF

符号位 1,expBits 255,fractBits 0x007FFFFF

QNaN

但是如果我再次输入“FFFFFFFF”,我的程序会打印出来:

0xFFFFFFFF

我的程序不会每次都打印出正确的输出,而是每隔一次打印出正确的输出。有没有人可以帮助我确定我的代码中出现错误的位置?任何帮助是极大的赞赏!

谢谢!

// do not change this code except in the following ways:
//   * write code for the following functions:
//      * bigOrSmallEndian()
//      * getNextHexInt()
//      * printLinesForNumber()
//   * change studentName by changing "I. Forgot" to your actual name

#include <stdio.h>
#include <stdlib.h>

static char *studentName = "Tenzin Shakya";

// report whether machine is big or small endian
void bigOrSmallEndian()
{
    int num = 1;
    if(*(char *)&num == 1)
    {
      printf("\nbyte order: little-endian\n\n");
   }
   else
  {
      printf("\nbyte order: big-endian\n\n");
  } 
}

// get next int (entered in hex) using scanf()
// returns 1 (success) or 0 (failure)
// if call succeeded, return int value via i pointer
int getNextHexInt(int *i)
{
    // replace this code with the call to scanf()
    //*i = 0;
    //return 1;
    scanf ("%x", i);
    return 1;
} 

// print requested data for the given number
void printNumberData(int i)
{
    //printf("%x %0#10x\n",i,*(int *)&i);
    int tru_exp =0;
    //int stored_exp;
    int negative;
    int exponent;
    int mantissa;

    printf("\n>");
    scanf("%x", &i);
    printf("\n0x%08X",i);

    negative = !!(i & 0x80000000);
    exponent = (i & 0x7f800000) >> 23;
    mantissa = (i & 0x007FFFFF);

    printf("\nsignBit %d, ", negative);
    printf("expbits %d, ", exponent);
    printf("fractbits 0x%08X", mantissa);
    // "%#010x, ", mantissa);

    if(exponent == 0)
    {
        if(mantissa != 0)
        {
            printf("\ndenormalized ");
        }
    }
    else{
        printf("\nnormalized: ");
        tru_exp = exponent - 127;
    printf("exp = %d", tru_exp);
    }

    if(exponent == 0 && mantissa == 0 && negative == 1)
    {

    printf("\n-zero");

    }

    if(exponent ==0 && mantissa == 0 && negative == 0)
    {
    printf("\n+zero");
    }

    if(exponent == 255 && mantissa != 0 && negative == 1)
    {

    printf("\nQNaN");

    }

    if(exponent == 255 && mantissa != 0 && negative == 0)
    {

    printf("\nSNaN");

    }

    if(exponent == 0xff && mantissa == 0 && negative == 1)
    {
    printf("\n-infinity");
    }

    if(exponent == 0xff && mantissa == 0 && negative == 0)
    {
    printf("\n+infinity");
    }

    printf("\n");
    while(i != 0)
    break;
}

// do not change this function in any way
int main(int argc, char **argv)
{
    int     i;                              // number currently being analyzed
    int     nValues;                        // number of values successfully parsed by       scanf

    printf("CS201 - A01p - %s\n\n", studentName);
    bigOrSmallEndian();
    for (;;) {
        if (argc == 1)                      // allow grading script to control ...
            printf("> ");                   // ... whether prompt character is printed
        nValues = getNextHexInt(&i);
        printf("0x%08X\n", i);
        if (! nValues) {                    // encountered bad input
            printf("bad input\n");
            while (getchar() != '\n') ;     // flush bad line from input buffer
            continue;
            }
        printNumberData(i);
        if (i == 0)
            break;
        }
    printf("\n");
    return 0;
}
4

2 回答 2

0

您在 中输入用户的号码getNextHexInt,但printNumberData用另一个 再次要求输入scanf。您不需要第二个scanf,因为输入i已经设置为来自getNextHexInt.

于 2013-02-10T04:24:34.090 回答
0

这是执行此操作的代码

float myFloat;
int myInt;
memcpy(&myInt, &myFloat, 4);
int signBit = ((1 << 31) & myInt) >> 31;
printf("%i\n", signBit)

我匆忙输入了它,希望它有效,我过会检查它

这是一个程序,但由于某种原因它显示-1

#include <string.h>
#include <stdio.h>

int main()
{
    float a = 1337;
    int* b = (int*)&a;

    int signbit = ((1 << 31) & *b) >> 31;
    printf("%i\n", signbit);
    a *= -1;
    signbit = ((1 << 31) & *b) >> 31;
    printf("%i\n", signbit);    

    return 0;
}
于 2013-02-10T04:20:03.487 回答