@mr_firuzinho

Что делают данные две функции в этом куске кода?

Здравствуйте, подскажите пожалуйста, немного не разобрался с функциями по работе с битами:
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;
}

Спасибо!
  • Вопрос задан
  • 106 просмотров
Решения вопроса 1
15432
@15432
Системный программист ^_^
Получение значения и установка конкретного бита в массиве данных

Тож самое что
return arr[n]
и
arr[n] = 1,
Но с побитовым доступом вместо побайтового, для экономии места
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы