c - 我的 C 函数没有返回正确的 int 到二进制值

标签 c

我正在尝试创建一个返回给定整数的二进制等效值的函数。但是,当给定测试输入 1234 时,它会返回给定输入的二进制值和左移版本的二进制值的错误值:

Enter a base-10 integer: 1234
Enter number of places to shift bit: 8

1234 1421075418
315904 1826920960

给定值和左移值是正确的,但二进制等价物不正确。

int showbits(int value) {
  return (value == 0 || value == 1 ? value : ((value % 2) + 10 * showbits(value / 2)));
}

void left_bit_shift() {
  int value = get_single_base_10();
  int number_shift = get_number_shift();
  int bit_value = showbits(value);

  int left_shifted_value = value << number_shift;
  int left_shifted_bit = showbits(left_shifted_value);

  printf("%d %d\n", value, bit_value);
  printf("%d %d", left_shifted_value, left_shifted_bit);
}

int get_single_base_10() {
  int value;
  printf("Enter a base-10 integer: ");
  scanf("%d", &value);
  return value;
}

int get_number_shift() {
  int shift;
  printf("Enter number of places to shift bit: ");
  scanf("%d", &shift);
  return shift;
}

最佳答案

因为1234的二进制是10011010010,它不能存储在您机器上的整数变量中。如果将 showbits() 的返回类型更改为 long,它可能会起作用。但这并不是获取二进制值的永久解决方案。

关于c - 我的 C 函数没有返回正确的 int 到二进制值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42406977/

相关文章:

c - malloc 如何申请堆内存

c - 为什么转换 (unsigned long long)DBL_MAX(或 FLT_MAX)也会导致 FE_INEXACT 升高?

c - malloc在嵌入式c中的使用

c++ - 我如何在 c/c++ 中使用某些特定的 dll?

c - 将 unsigned char 移动超过 8 位

c++ - C和C++相对于一元算术运算符存在差异的原因是什么 +

c - 内核模块参数更改(使用/sys/module)

c - ffmpeg/libavfilter 中的字幕

c - 缓冲区溢出 - 利用 gdb 进行调试时可以利用该漏洞,但是

c - 错误: assignment to expression with array type while using selection-sort