以二进制形式转换16位正数的程序

时间:2019-11-11 18:44:17

标签: c

我正在尝试编写一个程序,如果%2 ^ j = 0,则它打印1,否则它打印0,因此最后我得到了16位二进制代码。但是我没有收到任何错误,并且在输入输入数字(a)之后,终端崩溃了。 谢谢您的帮助。

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

int main() {
  uint16_t a, j, b, mod;
  printf(" Please insert a number between 0 and 65535 \n ");
  scanf("%d", &a);

  j = 16;
  while (j > 0)
    ;
  {
    b = pow(j, 2);
    mod = a % b;
    if (mod == 0) {
      printf("%d", 1);
    } else {
      printf("%d", 0);
    }
    j = j - 1;
  }

  return 0;
}

1 个答案:

答案 0 :(得分:4)

undefined behavior中使用%d格式时,您拥有scanf。该格式说明符期望参数为指向int的指针。

格式说明符和参数类型不匹配会导致UB。

对于uint16_t,请使用宏SCNu16(如this reference中所述):

scanf("%" SCNu16, &a);