Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 二进制操作,需要帮助吗_C_Binary - Fatal编程技术网

C 二进制操作,需要帮助吗

C 二进制操作,需要帮助吗,c,binary,C,Binary,我将要为一个程序创建一个函数,这是程序的一部分,是一个位图,用于保存内存地址可用的控件(这与该函数无关)。位图是位[64],它包含8 x 64位,下面的函数使用的参数号是函数应该占用的数据块数。在数组中,数据块[]应该是位值为0(空闲)的数据块的编号 这个程序的执行会产生一些奇怪的输出,而data_blocks[]给出的值超过了512的长度。谁能帮我一下吗?谢谢 #include <stdio.h> #include <string.h> void occupyData

我将要为一个程序创建一个函数,这是程序的一部分,是一个位图,用于保存内存地址可用的控件(这与该函数无关)。位图是位[64],它包含8 x 64位,下面的函数使用的参数号是函数应该占用的数据块数。在数组中,数据块[]应该是位值为0(空闲)的数据块的编号

这个程序的执行会产生一些奇怪的输出,而data_blocks[]给出的值超过了512的长度。谁能帮我一下吗?谢谢

#include <stdio.h>
#include <string.h>

void occupyDataBlocks(int number)
{

    int ab = number;

    char bit[512/8];

    int bitNum = 0;

    int count;

    int data_blocks[ab];

    int b;

    for(bitNum = 0; bitNum < (sizeof(bit)/sizeof(char)); bitNum++) {
        char x = bit[bitNum];

        for(count = 0; x != 0; x >>= 1 ) {
            if(!(x & 0)) {
                data_blocks[count] = count;
            }

            if(count == number) {
                break;
            }
            count++;
        }
        if(count == number) {
            break;
        }
    }

    if(count == number) {
        int a;

        for(a = 0; a < 5; a++) {
            printf("%d\n", data_blocks[a]);
        }

    } else {
        printf("Not enough data blocks\n");
    }
}

int main(void)
{
    occupyDataBlocks(3);

    return 1;
}
#包括
#包括
无效占用数据块(整数)
{
int ab=数字;
字符位[512/8];
int-bitNum=0;
整数计数;
int数据块[ab];
int b;
对于(bitNum=0;bitNum<(sizeof(bit)/sizeof(char));bitNum++){
char x=位[bitNum];
对于(计数=0;x!=0;x>>=1){
如果(!(x&0)){
数据块[计数]=计数;
}
如果(计数==数字){
打破
}
计数++;
}
如果(计数==数字){
打破
}
}
如果(计数==数字){
INTA;
对于(a=0;a<5;a++){
printf(“%d\n”,数据块[a]);
}
}否则{
printf(“数据块不足\n”);
}
}
内部主(空)
{
占用数据块(3);
返回1;
}
k,从哪里开始

1) “sizeof(char)”很可能是1。所以你有一个512字节的数组,而不是64字节的数组

2) “位”数组未初始化

3) 赋值“char x=bit[bitNum];”应该发生在循环内部

4) “strlen(bit)”并不像你想象的那样。它将“位”解释为文本字符串。您可能希望使用“sizeof(bit)/sizeof(char)”

5) “x&0”的计算结果始终为0。你想干什么?如果您试图测试位,您需要执行“!(x&1)”

6) “int data_blocks[number]”:这甚至可以编译吗?如果编译时不知道本地数组的大小,则无法分配这样的本地数组

7) 如果(计数=number){ 打破 }

只会让你从内部循环中解脱出来。外环继续不间断地工作


8) 您真的想在外循环的每次迭代中将“count”重置为0吗?您希望代码在数组中的某个位置找到3个可用位置,还是在一个字节中找到3个可用位置?

谢谢。代码现在将编译并运行,它给了我一个看起来正确的结果。我希望代码在数组中找到3个空闲位置,因为我们使用的是位图而不是bytemap。说
sizeof(char)
“最有可能是1”有点像说“氢最有可能在其原子核中有一个质子”。哈。我的意思是,char很可能是1字节。sizeof(char)的定义实际上是1.Hi。我相信,我的回答是,这项工作我想要的方式是快速。我想做的是创建一个控制512位的位图,一个位可以在0和1被占用时使用:我们有一个数组字符位[64],这就是位图。函数occupydatablock(int number)应搜索位[],并找到一个空闲位(0),将该位设置为已占用(1),并将位的位置置于0和512之间的数组数据块[0]。我们如何获得代码来实现这一点?如果从main调用accupyDataBlocks(5)两次,将得到完全相同的结果。