Здравствуйте, подскажите пожалуйста, немного не разобрался с функциями по работе с битами:
int GetBit(int n, unsigned char *arr){
int index = n / 8;
int bit = n % 8;
return (arr[index] >> bit) & 1;
}
void SetBit(int n, unsigned char *arr){
int index = n / 8;
int bit = n % 8;
arr[index] |= (1 << bit);
}
Что делают эти функции в данном куске кода ? Сам кусок - это поиск простых чисел с помощью решето Эратосфена:
#include <stdio.h>
#include <conio.h>
#include <string.h>
#define SIZE 12500
int GetBit(int n, unsigned char *arr){
int index = n / 8;
int bit = n % 8;
return (arr[index] >> bit) & 1;
}
void SetBit(int n, unsigned char *arr){
int index = n / 8;
int bit = n % 8;
arr[index] |= (1 << bit);
}
int main(int argc, char const **argv){
int m,n, isAbsent;
scanf("%d%d", &m, &n);
unsigned char allbit[SIZE];
memset(allbit, 0, sizeof(allbit));
for(int i = 2; i <= n; i++){
if(GetBit(i, allbit) == 0){
for(int j = i + i; j <= n; j+= i){
SetBit(j, allbit);
}
}
}
for(int i = m; i <= n; i++){
if(GetBit(i, allbit) == 0){
printf("%d\n", i);
isAbsent = 0;
}
}
if(isAbsent){
printf("net\n");
}
getch();
return 0;
}
Спасибо!