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

qvtsj1bj  于 2022-12-03  发布在  其他
关注(0)|答案(2)|浏览(192)

我想实现一个函数get_bit(value,pos),它返回索引位置处的无符号整数值的位(0或1)的值。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;
}

但是它显示出分割错误。2有谁能帮助它工作吗?

deikduxw

deikduxw1#

正如我在评论中提到的,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%c\n", val, get_bit(val,0), get_bit(val,1), get_bit(val,2));
    return 0;
}

输出:

val(5) is : 0b101
ryhaxcpt

ryhaxcpt2#

您可以抓取如下位,然后打印它。

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

相关问题