gpt4 book ai didi

c - 二进制操作,需要帮​​助

转载 作者:太空宇宙 更新时间:2023-11-04 03:06:53 26 4
gpt4 key购买 nike

我要为一个程序创建一个函数,这是一个程序的一部分,并且是一个位图,用于控制哪些内存地址可以免费使用(这与该函数无关) .位图是 bit[64],它包含 8 x 64 位,下面的函数采用参数编号,该参数编号是函数应占用的数据 block 数。在数组 data_blocks[] 中应该是位值为 0(空闲)的数据 block 的编号。

这个程序的执行给出了一些奇怪的输出,而 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;
}

最佳答案

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) if(count == number) { 休息;

只会让你脱离内循环。外循环不间断地继续。

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

关于c - 二进制操作,需要帮​​助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3939052/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com