Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
truktarushkin
0 / 0 / 0
Регистрация: 21.05.2012
Сообщений: 10
#1

макросы - C++

27.05.2012, 20:08. Просмотров 540. Ответов 5
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#define EMPTY        0x00
#define ILLEGAL      0xF0
#define B_PRIVATE  0x01           // 1 бит - наличие
#define W_PRIVATE 0x03           // 2 бита - цвет
#define B_QUEEN     0x05           // 3 бита - дамка
#define W_QUEEN    0x07           // 4 бита - выбрана
 
#define AB_PRIVATE  0x09
#define AW_PRIVATE 0x0B
#define AB_QUEEN    0x0D
#define AW_QUEEN   0x0F
......................................................
bool Cell::IsEmpty(void)
{ if (Data==EMPTY) return true; else return false; }
 
bool Cell::Selected(void)
{ if (Data&0x08 && Data&0x01) return true; else return false; }
 
bool Cell::IsQueen(void)
{ if (Data&0x04 && Data&0x01) return true; else return false; }
 
 
bool Cell::IsWhite(void)
{ if (Data&0x02 && Data&0x01) return true; else return false; }
 
bool Cell::IsBlack(void)
{ if (!(Data&0x02) && Data&0x01) return true; else return false; }
 
void Cell::Select(void)
{ Data = Data | 0x08; }
 
void Cell::Deselect(void)
{ Data = Data & 0xf7; }
EMPTY соответствует пустой клетке на доске для игры в шашки
ILLEGAL клетке, на которой шашка находиться не может
B_PRIVATE чёрная шашка
W_PRIVATE белая
B_QUEEN чёрная дамка
W_QUEEN белая
AB_PRIVATE белая шашка выделена
AW_PRIVATE черная выделена
AB_QUEEN белая дамка выделена
AW_QUEEN чёрная
Data хранит в себе эти значения
как работают функции? не могу разобраться с шестнадцатеричными цифрами и комментарием "1 бит - наличие, 2 бита - цвет, 3 бита - дамка, 4 бита - выбрана"

Добавлено через 32 минуты
Апдэйт
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.05.2012, 20:08     макросы
Посмотрите здесь:

макросы - C++
Помогите со встроенными макросами, нигде не могу найти. Дайте ссылку на справочник по встроенным макросам либо можно выложить их здесь. ...

Макросы - C++
Написать макрос находящий большое из 4 чисел в студии с++

Макросы - C++
Ребята помогите!Надо переделать все пож макросы.Но в литературе как -то всё обрывками написано.непонятно как целиком программу писать! ...

Макросы - C++
Здравствуйте, сделал программу, а мне еще сказали нужно сделать её с использованием макросов, знаю что это не долго и всё, не мог бы...

Макросы в С++ - C++
Доброго времени суток. Подскажите, где можно почитать про написание макросов для классов? У меня есть класс class Transition { ...

макросы - C++
#include <iostream> using namespace std; #define printarray(x,y)//вывод массива x-имя массива, y-число элементов???? int main() ...

Вложенные макросы - C++
Добрый день. Есть такой макрос: #define QW_QWERTY(data) int testvar = data; #define HELPER2(MACROS, ...) QW_##MACROS __VA_ARGS__ ...

Предопределённые макросы - C++
Всем привет! Скажите кто знает как объяснить компилятору что он работает в Linux или Win32? Я слышал что есть предопределенные макросы, но...

Макросы с аргументами - C++
Напишите программу, содержащую макросы с аргументами, вычисляющие площади различных геометрических фигур (например, квадрата,...

Встроенные макросы - C++
Как заставить работать встроенные макросы? Не отображает! #include "stdafx.h" #include <iostream> using namespace std; int...

Шаблоны и Макросы С++ - C++
Задание связанное с макросами и шаблонами, ни как не могу решить проблему. Задание: Макрос - Квадрат числа Выражение - Квадрат...

Макросы в enum? - C++
Есть макросы #define angles (1<<0) #define v_angle (1<<1) #define punchangle (1<<2) Можно сделать типа такого: ? enum (...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Avazart
Эксперт С++
7115 / 5292 / 273
Регистрация: 10.12.2010
Сообщений: 23,381
Записей в блоге: 17
27.05.2012, 20:53     макросы #2
как работают функции?
По битово.

0116 = 012
0316 = 112
итд.

Калькулятор в помощь...

Каждый бит в числе отвечает за наличие/отсутствие чего-то.
truktarushkin
0 / 0 / 0
Регистрация: 21.05.2012
Сообщений: 10
28.05.2012, 00:29  [ТС]     макросы #3
это я понимаю, почему, например, в функции Cell::IsQueen(void) исп-ся "Data&0x04", в макросе такой цифры нет же. вот этот момент мне не понятен
Avazart
Эксперт С++
7115 / 5292 / 273
Регистрация: 10.12.2010
Сообщений: 23,381
Записей в блоге: 17
28.05.2012, 00:42     макросы #4
416= 1002

Data&0x04 проверяет равен ли 3-й бит в числе единице

516= 1012

а третий бит у нас отвечает за дамку (как написано в коментарии макросов)

Добавлено через 8 минут
Константы можно было бы переписать в С++ стиле, и ф-ции записать иначе
C++
1
2
3
4
5
6
7
8
9
const int b_queen= 0x05;
const int w_queen= 0x07;
 
 
bool Cell::IsQueen(void)
{
if (Data==b_queen || Data==w_queen) return true; 
return false; 
}
truktarushkin
0 / 0 / 0
Регистрация: 21.05.2012
Сообщений: 10
28.05.2012, 01:19  [ТС]     макросы #5
вот такое объяснение мне и нужно было, спасибо!
grizlik78
Эксперт С++
1907 / 1439 / 110
Регистрация: 29.05.2011
Сообщений: 2,995
28.05.2012, 02:57     макросы #6
Комментарии в исходном посте в строках 5-8 неудачные. Во-первых они не относятся к этим строкам, а во-вторых они кривоваты.

Можно было бы сделать более осмысленно, что-нибудь вроде
C++
1
2
3
4
5
6
7
8
9
#define IS_PRESENT   0x01           // 0-й бит - наличие
#define IS_WHITE     0x02           // 1-й бит - цвет
#define IS_QUEEN     0x04           // 2-й бит - дамка
#define IS_SELECTED  0x08           // 3-й бит - выбрана
 
#define B_PRIVATE  IS_PRESENT
#define W_PRIVATE  (IS_PRESENT | IS_WHITE)
#define B_QUEEN    (IS_PRESENT | IS_QUEEN)
#define W_QUEEN    (IS_PRESENT | IS_WHITE | IS_QUEEN)
Тогда бы и функции читались бы легче. Например
C++
1
2
3
4
5
bool Cell::Selected(void)
{ if (Data & IS_SELECTED && Data & IS_PRESENT) return true; else return false; }
 
bool Cell::IsQueen(void)
{ if (Data & IS_QUEEN && Data & IS_PRESENT) return true; else return false; }
Yandex
Объявления
28.05.2012, 02:57     макросы
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru