OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Пятница, 14 Август, 2020 18:03

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
 Заголовок сообщения: #define TRUE (!FALSE)
СообщениеДобавлено: Понедельник, 10 Май, 2010 16:21 

Зарегистрирован: Пятница, 25 Сентябрь, 2009 13:10
Сообщения: 1177
Откуда: Tel-Aviv
В одной небезызвестной библиотеке можно найти определение булевых ПРАВДА и ЛОЖЬ в виде следующих макросов:
Код:
#define FALSE (0)
#define TRUE (!FALSE)


С FALSE всё ясно. Ноль - и в Африке ноль. Вопрос: правильно ли я определил TRUE:
Код:
   CONST
      FALSE* = 0H; (* int32 *)
      TRUE* = 0FFFFFFFFH; (* ~FALSE*)
Или его определять как MIN(INTEGER)?

Кстати, надо подумать на досуге насчёт определения нового типа "МОЖЕТ БЫТЬ". :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: #define TRUE (!FALSE)
СообщениеДобавлено: Понедельник, 10 Май, 2010 16:26 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
Компилятор TinyC на такой код:
Код:
#include <stdio.h>

#define FALSE (0)
#define TRUE (!FALSE)

void main(void)
{
    printf("%X\n", TRUE);
}
выдаёт
Код:
1


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: #define TRUE (!FALSE)
СообщениеДобавлено: Понедельник, 10 Май, 2010 16:50 

Зарегистрирован: Четверг, 23 Апрель, 2009 18:01
Сообщения: 219
CONST FALSE = 0; TRUE = 1;


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: #define TRUE (!FALSE)
СообщениеДобавлено: Понедельник, 10 Май, 2010 16:50 

Зарегистрирован: Пятница, 25 Сентябрь, 2009 13:10
Сообщения: 1177
Откуда: Tel-Aviv
ну если так, то непонятен механизм логического преобразования.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: #define TRUE (!FALSE)
СообщениеДобавлено: Понедельник, 10 Май, 2010 17:40 

Зарегистрирован: Воскресенье, 28 Май, 2006 22:12
Сообщения: 1470
Роман М. писал(а):
ну если так, то непонятен механизм логического преобразования.

в си логический тип определяется со значениями 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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: #define TRUE (!FALSE)
СообщениеДобавлено: Понедельник, 10 Май, 2010 21:05 

Зарегистрирован: Четверг, 23 Апрель, 2009 18:01
Сообщения: 219
FreePascal и Delphi: LongBool - полный аналог си-шного BOOL. Всё, что не 0 - истина.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: #define TRUE (!FALSE)
СообщениеДобавлено: Понедельник, 10 Май, 2010 21:43 

Зарегистрирован: Воскресенье, 28 Май, 2006 22:12
Сообщения: 1470
Wlad2 писал(а):
Роман М. писал(а):
ну если так, то непонятен механизм логического преобразования.

в си логический тип определяется со значениями 0 и 1.


то есть, вам, для адекватного перевода на оберон, нужно явно определять функции ЛОГИЧЕСКИХ операций НАД ЦЕЛЫМИ!
и - не только. ещё - над целыми и логическими...
и - аналогичные АРИФМЕТИЧЕСКИЕ и битовые над ЛОГИЧЕСКИМИ (а - вперемешку с целыми).

в результате:
получаем:

1) арифметика над:
1.а) целым и целым
1.б) целым и логическим

2) битовые операции над:
2.а) целым и целым
2.б) целым и логическим
сюда же - битовая инверсия над обеими разновидностями типов

3) логические операции:
3.а) целым и целым
3.б) целым и логическим
сюда же - логическая инверсия над обеими разновидностями типов

И ВНИМАТЕЛЬНО преобразовывать сишные выражения в оберон-выражения...

в любом случае, "привести к общему базису" - не получится. природа типов и смысла операций - различна - именно придётся всё, что я описал - прописывать и елозить пальчиком по сишным выражениям... - артель "восход солнца вручную" приветствует вас! :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: #define TRUE (!FALSE)
СообщениеДобавлено: Понедельник, 10 Май, 2010 22:05 

Зарегистрирован: Четверг, 23 Апрель, 2009 18:01
Сообщения: 219
Проще определить функцю вроде Bool(Val: INTEGER), возвращающая нормальные TRUE/FALSE, в зависимости от значения Val.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: #define TRUE (!FALSE)
СообщениеДобавлено: Понедельник, 10 Май, 2010 22:19 

Зарегистрирован: Воскресенье, 28 Май, 2006 22:12
Сообщения: 1470
Berserker писал(а):
Проще определить функцю вроде Bool(Val: INTEGER), возвращающая нормальные TRUE/FALSE, в зависимости от значения Val.
да-да... и - что дальше? ;)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: #define TRUE (!FALSE)
СообщениеДобавлено: Вторник, 11 Май, 2010 10:31 

Зарегистрирован: Пятница, 25 Сентябрь, 2009 13:10
Сообщения: 1177
Откуда: Tel-Aviv
Wlad2 писал(а):
то есть, вам, для адекватного перевода на оберон, нужно явно определять функции ЛОГИЧЕСКИХ операций НАД ЦЕЛЫМИ!
и - не только. ещё - над целыми и логическими...
и - аналогичные АРИФМЕТИЧЕСКИЕ и битовые над ЛОГИЧЕСКИМИ (а - вперемешку с целыми).
К счастью, мне требуется только интерфейс к этой библиотеке.

Спасибо за разъяснение!


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2020, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB