Вот код, который я написал, чтобы манипулировать битами изнутри массив. В моем коде я выделил 60 байт памяти из стека, который дает вам 480 бит для игры. Затем вы можете использовать функцию setbit, чтобы установить любой бит из 60 байтов в нуль или один, и использовать getbit для поиска значения бит.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int getbit(unsigned char *bytes,int bit){
return ((bytes[(bit/8)] >> (bit % 8)) & 1);
}
void setbit(unsigned char *bytes,int bit,int val){
if (val==1){
bytes[(bit/8)] |= (1 << (bit % 8));
}else{
bytes[(bit/8)] &= ~(1 << (bit % 8));
}
}
int main(int argc, char **argv) {
unsigned char ab[60]; // value must be the ceiling of num of bits/8
memset(ab,0,60); // clear the whole array before use.
//A
setbit(ab,6,1);
setbit(ab,0,1);
//B
setbit(ab,14,1);
setbit(ab,9,1);
//C
setbit(ab,22,1);
setbit(ab,17,1);
setbit(ab,16,1);
//Change to B
setbit(ab,16,0);
printf("ab = %s\n",ab);
printf("bit 17 = %d\n",getbit(ab,17));
return 0;
}
Этот URL имеет несколько фрагментов кода для битовых операций:
How do you set, clear, and toggle a single bit?
Я не думаю, что так. 'malloc' имеет понятие байтов. То, что происходит на уровне бит, определяется реализацией. –
C не имеет такой концепции «бит-массива». Вы можете выделить байты. Если вам нужны 7 бит, вам придется выделить целый байт и использовать его только часть. – immibis
Если вы хотите использовать бит * поле *, это должно быть сделано как часть структуры. –