OberonCore https://forum.oberoncore.ru/ |
|
#define TRUE (!FALSE) https://forum.oberoncore.ru/viewtopic.php?f=27&t=2631 |
Страница 1 из 1 |
Автор: | Роман М. [ Понедельник, 10 Май, 2010 16:21 ] |
Заголовок сообщения: | #define TRUE (!FALSE) |
В одной небезызвестной библиотеке можно найти определение булевых ПРАВДА и ЛОЖЬ в виде следующих макросов: Код: #define FALSE (0) #define TRUE (!FALSE) С FALSE всё ясно. Ноль - и в Африке ноль. Вопрос: правильно ли я определил TRUE: Код: CONST Или его определять как MIN(INTEGER)?FALSE* = 0H; (* int32 *) TRUE* = 0FFFFFFFFH; (* ~FALSE*) Кстати, надо подумать на досуге насчёт определения нового типа "МОЖЕТ БЫТЬ". |
Автор: | Geniepro [ Понедельник, 10 Май, 2010 16:26 ] |
Заголовок сообщения: | Re: #define TRUE (!FALSE) |
Компилятор TinyC на такой код: Код: #include <stdio.h> выдаёт#define FALSE (0) #define TRUE (!FALSE) void main(void) { printf("%X\n", TRUE); } Код: 1
|
Автор: | Александр Шостак [ Понедельник, 10 Май, 2010 16:50 ] |
Заголовок сообщения: | Re: #define TRUE (!FALSE) |
CONST FALSE = 0; TRUE = 1; |
Автор: | Роман М. [ Понедельник, 10 Май, 2010 16:50 ] |
Заголовок сообщения: | Re: #define TRUE (!FALSE) |
ну если так, то непонятен механизм логического преобразования. |
Автор: | Wlad [ Понедельник, 10 Май, 2010 17:40 ] |
Заголовок сообщения: | Re: #define TRUE (!FALSE) |
Роман М. писал(а): ну если так, то непонятен механизм логического преобразования. в си логический тип определяется со значениями 0 и 1. попутно считается, что всё, что НЕ РАВНО 0 - истина. то есть: пусть a = 0b01 b = 0b10 тогда a & b == 0b00 == 0 == FALSE a && b == (bool)0b01 && (bool)0b10 == TRUE && TRUE == TRUE == 1 или, ещё с = 0b01 d = !c // == !((bool) 0b01) == ! TRUE == FALSE == 0 e = ~c // == ~0b0 == 0b10 == 1 == TRUE будьте внимательны! PS ещё более внимательны будьте в случае с работой с XOR-ом (^) это ПОБИТОВАЯ операция. со всеми вытекающими... PPS строка e = ~c // == ~0b0 == 0b10 == 1 == TRUE правильней бы, для иллюстрации, выглядела бы так: e = !!~c // == !!~0b0 == !!0b10 == !!1 == !!TRUE == !FALSE == TRUE == 1 |
Автор: | Александр Шостак [ Понедельник, 10 Май, 2010 21:05 ] |
Заголовок сообщения: | Re: #define TRUE (!FALSE) |
FreePascal и Delphi: LongBool - полный аналог си-шного BOOL. Всё, что не 0 - истина. |
Автор: | Wlad [ Понедельник, 10 Май, 2010 21:43 ] |
Заголовок сообщения: | Re: #define TRUE (!FALSE) |
Wlad2 писал(а): Роман М. писал(а): ну если так, то непонятен механизм логического преобразования. в си логический тип определяется со значениями 0 и 1. то есть, вам, для адекватного перевода на оберон, нужно явно определять функции ЛОГИЧЕСКИХ операций НАД ЦЕЛЫМИ! и - не только. ещё - над целыми и логическими... и - аналогичные АРИФМЕТИЧЕСКИЕ и битовые над ЛОГИЧЕСКИМИ (а - вперемешку с целыми). в результате: получаем: 1) арифметика над: 1.а) целым и целым 1.б) целым и логическим 2) битовые операции над: 2.а) целым и целым 2.б) целым и логическим сюда же - битовая инверсия над обеими разновидностями типов 3) логические операции: 3.а) целым и целым 3.б) целым и логическим сюда же - логическая инверсия над обеими разновидностями типов И ВНИМАТЕЛЬНО преобразовывать сишные выражения в оберон-выражения... в любом случае, "привести к общему базису" - не получится. природа типов и смысла операций - различна - именно придётся всё, что я описал - прописывать и елозить пальчиком по сишным выражениям... - артель "восход солнца вручную" приветствует вас! |
Автор: | Александр Шостак [ Понедельник, 10 Май, 2010 22:05 ] |
Заголовок сообщения: | Re: #define TRUE (!FALSE) |
Проще определить функцю вроде Bool(Val: INTEGER), возвращающая нормальные TRUE/FALSE, в зависимости от значения Val. |
Автор: | Wlad [ Понедельник, 10 Май, 2010 22:19 ] |
Заголовок сообщения: | Re: #define TRUE (!FALSE) |
Berserker писал(а): Проще определить функцю вроде Bool(Val: INTEGER), возвращающая нормальные TRUE/FALSE, в зависимости от значения Val. да-да... и - что дальше?
|
Автор: | Роман М. [ Вторник, 11 Май, 2010 10:31 ] |
Заголовок сообщения: | Re: #define TRUE (!FALSE) |
Wlad2 писал(а): то есть, вам, для адекватного перевода на оберон, нужно явно определять функции ЛОГИЧЕСКИХ операций НАД ЦЕЛЫМИ! К счастью, мне требуется только интерфейс к этой библиотеке.и - не только. ещё - над целыми и логическими... и - аналогичные АРИФМЕТИЧЕСКИЕ и битовые над ЛОГИЧЕСКИМИ (а - вперемешку с целыми). Спасибо за разъяснение! |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |