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