我想实现一个函数get_bit(value,pos)
,使它从索引pos处的无符号整数值返回位(0或1)的值。value
是一个整数。
到目前为止,我试着做的是:
#include <stdio.h>
#include <math.h>
long decimalToBinary(int decimalnum)
{
long binarynum = 0;
int rem, temp = 1;
while (decimalnum!=0)
{
rem = decimalnum%2;
decimalnum = decimalnum / 2;
binarynum = binarynum + rem*temp;
temp = temp * 10;
}
return binarynum;
}
const char * get_bit(int value, int pos) {
char result[99];
long bin_val = decimalToBinary(value);
sprintf(result, "%f", bin_val);
return result[pos];
}
int main() {
printf( get_bit(5,0) );
return 0;
}
显示分割错误。有谁能帮上忙吗?
正如我在评论中提到的,您的get_bit
返回值是不正确的。您返回result[pos]
,这是char
值作为char *
。然后,printf
解引用一个无效的地址,从而进行分段故障。下面的修复正在为我工作:
#include <stdio.h>
#include <math.h>
long decimalToBinary(int decimalnum)
{
long binarynum = 0;
int rem, temp = 1;
while (decimalnum!=0)
{
rem = decimalnum%2;
decimalnum = decimalnum / 2;
binarynum = binarynum + rem*temp;
temp = temp * 10;
}
return binarynum;
}
const char get_bit(int value, int pos) {
char result[99];
long bin_val = decimalToBinary(value);
sprintf(result, "%ld", bin_val);
return result[pos];
}
int main() {
int val = 5;
printf("val(%d) is : 0b%c%c%cn", val, get_bit(val,0), get_bit(val,1), get_bit(val,2));
return 0;
}
输出:
val(5) is : 0b101
你可以像下面这样抓取位然后打印出来。
char get_bit(int value, int pos) {
long bin_val = decimalToBinary(value);
cout << "binary value = " << bin_val << endl;
for(int i=0; i<pos; i++)
bin_val /= 10;
return bin_val%10;
}