我试图创建一个返回给定整数的二进制等值的函数。但是当给出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;
}
答案 0 :(得分:0)
因为1234
的二进制文件是10011010010
,它无法存储在您计算机上的整数变量中。如果将showbits()
的返回类型更改为long,则可能会有效。但这不是获得二进制值的永久解决方案。