NQUARE
@NQUARE

Где ошибка в простеньком коде (работа с битами)?

День добрый.

Вот собственно код:
#include <curses.h>
#include <unistd.h>
#include <cstdlib>
 
#define bRead(value, bit) (((value) >> (bit)) & 0x01)
#define bWrite(value, bit, bitvalue) (bitvalue ? (value) |= (1UL << (bit)) : (value) &= ~(1UL << (bit)))
 
int main() {
    initscr();
    bool map = 0;
 
    for (int i = 0; i < 10; ++i) {
        bWrite(map, 1, rand() % 2);
 
        for (int j = 8; j >= 0; --j) {
            addch((bRead(map, j) ? '#' : '_'));
        }
        map << 1;
        
        refresh();
        sleep(1);
        clear();
    }
 
    endwin();
    return 0;
}

Должно выводится что то типа платформера, только без игрока.
Но вместо этого выводится просто статичное изображение с одним битом на конце. Карта просто не сдвигается.

Помогите пожалуйста разобраться, только начал работать с битами.

P.S: Если не знаете про curses не обращайте на это внимание, проблема только при работе с битами)
  • Вопрос задан
  • 82 просмотра
Пригласить эксперта
Ответы на вопрос 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
А что вы хотите, если все 9 раз устанавливаете бит в позицию 1?
Ответ написан
NQUARE
@NQUARE Автор вопроса
#include <curses.h>
#include <unistd.h>
#include <cstdlib>

#define bRead(value, bit) (((value) >> (bit)) & 0x01)
#define bWrite(value, bit, bitvalue) (bitvalue ? (value) |= (1UL << (bit)) : (value) &= ~(1UL << (bit)))

int main() {
	initscr();
	char map = 0;	/////////!

	for (int i = 0; i < 10; ++i) {
		bWrite(map, 0, rand() % 2);

		for (int j = 7; j >= 0; --j) {
			addch((bRead(map, j) ? '#' : '_'));
		}
		map <<= 1;	/////////
		
		refresh();
		sleep(1);
		clear();
	}

	endwin();
	return 0;
}
Ответ написан
Ваш ответ на вопрос

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

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