Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Вт мар 19, 2024 14:57

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 16 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: конвертирование флагов
СообщениеДобавлено: Чт ноя 12, 2009 17:46 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
уже отмечалось, что флаговые значения в представлении Форта отличаются от общепринятых (к примеру в Сях)
преобразование Форт-флагов в Сишные и обратно:
<pre>
\ конвертировать сишный флаг в Форт-представление
: >flag ( f --> flag ) 1 - INVERT ;

\ конвертировать Фот-флаг в сишный
: flag> ( flag --> f ) 0 <> 1 AND ;
</pre>

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт ноя 12, 2009 19:14 
Не в сети
Аватара пользователя

Зарегистрирован: Пт дек 26, 2008 21:16
Сообщения: 412
Откуда: Великий Новгород
Благодарил (а): 9 раз.
Поблагодарили: 4 раз.
Что в форте появились флаги???
Это имеется в виду Fаlse и True.
Только мне сдается что любое значение отличное от 0 в Си будет True.
Так что конвертировать нет необходимости.
Или я не прав? :roll:


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт ноя 12, 2009 19:24 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
эм, флаги в Форте всегда были, только их значения отличаются от привычных для других ээ, языков.
в Форте значение TRUE = -1 (то есть все биты уставновлены в 1)
значение FALSE = 0 (все биты сброшены).

Отдавать, например виндошному АПИ, значение -1 бывает черевато (не опознается как TRUE).

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт ноя 12, 2009 19:27 
Не в сети
Аватара пользователя

Зарегистрирован: Пт дек 26, 2008 21:16
Сообщения: 412
Откуда: Великий Новгород
Благодарил (а): 9 раз.
Поблагодарили: 4 раз.
mOleg писал(а):
Отдавать, например виндошному АПИ, значение -1 бывает черевато (не опознается как TRUE).

Хм ни разу с таким не сталкивался. Это скорее особености виндовых функций а не Си.
Что скажут знатоки стандартов??? :<


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт ноя 12, 2009 19:33 
Не в сети

Зарегистрирован: Чт ноя 23, 2006 00:44
Сообщения: 494
Откуда: СПб
Благодарил (а): 19 раз.
Поблагодарили: 8 раз.
_Harry писал(а):
mOleg писал(а):
Отдавать, например виндошному АПИ, значение -1 бывает черевато (не опознается как TRUE).

Хм ни разу с таким не сталкивался. Это скорее особености виндовых функций а не Си.
Что скажут знатоки стандартов??? :<

Хоть я и не знаток стандартов, но столкнулся в именно с тем, что вызов API с произвольным значением <>0 не давало требуемого эффекта. Но это скорее "частный" (либа user32.dll ф-ции связанные с DDE) случай.
Взял справочник по Сям и увидел там что TRUE = 1 (а не любое значение >0 как в Форте)!!!


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт ноя 12, 2009 20:48 
Не в сети
Аватара пользователя

Зарегистрирован: Вт мар 20, 2007 23:39
Сообщения: 1261
Благодарил (а): 3 раз.
Поблагодарили: 19 раз.
mOleg писал(а):
в Форте значение TRUE = -1

А разве не TRUE = "не ноль" ?

_________________
Cтоимость сопровождения программного обеспечения пропорциональна квадрату творческих способностей программиста.
Роберт Д. Блисc


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт ноя 12, 2009 23:11 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
Цитата:
А разве не TRUE = "не ноль" ?
так должно быть, но бывает и иначе, по крайней мере ввиду индивидуальности каждого форта


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт ноя 13, 2009 07:55 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
VoidVolker писал(а):
А разве не TRUE = "не ноль" ?

все операции, возвращающие флаги во всех Фортах возвращают в качестве TRUE значение -1 (все биты установлены).
однако, все операции анализирующие флаги (IF WHILE и т.п.) считают за TRUE отличное от нуля значение.

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт ноя 13, 2009 12:02 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
mOleg писал(а):
преобразование Форт-флагов в Сишные и обратно:
\ конвертировать сишный флаг в Форт-представление
: >flag ( f --> flag ) 1 - INVERT ;

\ конвертировать Фот-флаг в сишный
: flag> ( flag --> f ) 0 <> 1 AND ;

Можно попроще:
Код:
\ конвертировать сишный флаг в Форт-представление
: >flag ( f --> flag ) NEGATE ;

\ конвертировать Форт-флаг в сишный
: flag> ( flag --> f ) 0<> NEGATE ;

_________________
С уважением, chess


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт ноя 13, 2009 18:06 
Не в сети
Аватара пользователя

Зарегистрирован: Пт дек 26, 2008 21:16
Сообщения: 412
Откуда: Великий Новгород
Благодарил (а): 9 раз.
Поблагодарили: 4 раз.
Ilya писал(а):
Взял справочник по Сям и увидел там что TRUE = 1 (а не любое значение >0 как в Форте)!!!

А вот я в википедии нашел.
Код:
typedef int bool;
#define FALSE 0
#define TRUE (-1)

Похоже у сишников тоже "..... порядку нет как нет" :dmad;


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт ноя 13, 2009 18:11 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
скорее википедия глючит.
вообще, я так понимаю, проблема будет везде, где будет встречаться что-то подобное:
<pre>
if(value=true){someting};
</pre>
если же будет что-то вроде:
<pre>
if(value){someting};
</pre>
проблем быть вроде как не должно, хотя опять же как там будет преобразование типов в конкретном компиляторе проходить не известно.

в Форте флаги выбраны вполне логично и удобно, чего я не скажу про Си 8)

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт ноя 13, 2009 18:21 
Не в сети
Аватара пользователя

Зарегистрирован: Пт дек 26, 2008 21:16
Сообщения: 412
Откуда: Великий Новгород
Благодарил (а): 9 раз.
Поблагодарили: 4 раз.
mOleg писал(а):
скорее википедия глючит.

Вполне может быть, но я уже не раз встречал именно такой расклад.
Да и вполне известный факт что разработчики Си компиляторов не так уж
жестко придерживаются стандарта.
т.е. некотрые тоже поступают
mOleg писал(а):
вполне логично и удобно


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт ноя 13, 2009 18:35 
Не в сети
Аватара пользователя

Зарегистрирован: Пт дек 26, 2008 21:16
Сообщения: 412
Откуда: Великий Новгород
Благодарил (а): 9 раз.
Поблагодарили: 4 раз.
А вот еще чего нашел
The C99 version of C provides a built-in _Bool data type. It is large enough to store the values 0 and 1.
И вот еще....
During its standardization process, the C++ programming language introduced the bool, true and false keywords, adding a native data type to support Boolean data. Its size is implementation-defined.[3] bool was introduced in 1993[4].

Values of type bool are either true or false.[5] Implicit conversions exist between bool and other integral types, floating point types, pointer types, and pointer-to-member types.[6] In addition, user-defined types can be converted to bool via a user-defined conversion operator. In general, a zero or null-pointer value is converted to false, any other value is converted to true.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт ноя 19, 2009 16:29 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июн 25, 2009 11:12
Сообщения: 412
Благодарил (а): 41 раз.
Поблагодарили: 8 раз.
mOleg писал(а):
в Форте флаги выбраны вполне логично и удобно, чего я не скажу про Си 8)


Просто то, что называется каноническим значением истины, различается: 1 и -1.
Если каноническое значение 1, канонический способ инверсии есть операция "1 XOR"
Если каноническое значение -1, канонический способ инверсии есть операция "NOT"
У каждого выбора свои преимущества и недостатки.
В 4те, например, менее удобно прибавлять булеву величину к целому, чем в С:
sum += cond;
против
cond @ 1 AND sum +!


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт ноя 19, 2009 17:49 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
Цитата:
в Форте флаги выбраны вполне логично и удобно, чего я не скажу про Си

Вот всегда ли хорошо критиковать промышленный стандарт? Может :wink: там не всё так нелогично?
Цитата:
if(value=true){someting};

если внутри if() действие вместо сравнения ( = вместо ==) то компилятор проглотит, но результаты непредсказуемы -
хотя GCC должен отловить как ошибку


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 16 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]


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

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


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

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB