返回c语言中二进制值的位

  • 本文关键字:二进制 语言 返回 c
  • 更新时间 :
  • 英文 :


我想实现一个函数get_bit(value,pos),使它从索引pos处的无符号整数值返回位(0或1)的值。value是一个整数。

例如,如果value = 5(二进制中的0101),则get_bit(5,0) =1,然后如果get_bit(5,1) = 0,则get_bit(5,2)=1,以此类推。

到目前为止,我试着做的是:

#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;
}

最新更新