- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我要为一个程序创建一个函数,这是一个程序的一部分,并且是一个位图,用于控制哪些内存地址可以免费使用(这与该函数无关) .位图是 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/
嗨,我是第一次玩 Pig,我很好奇如何处理将一个字段拆分成多个其他字段。 我有一个包,A,如下图: grunt> Dump A; (text, text, Mon Mar 07 12:00:00 CD
如何添加架构中未定义的固定字段(例如日期或月份)?我运行了以下 pig 脚本以将固定日期添加到我的结果表中,并收到以下错误消息:Invalid field projection。方案中不存在投影字段
我是一名优秀的程序员,十分优秀!