Forth http://www.fforum.winglion.ru/ |
|
конвертирование флагов http://www.fforum.winglion.ru/viewtopic.php?f=25&t=2310 |
Страница 1 из 2 |
Автор: | mOleg [ Чт ноя 12, 2009 17:46 ] |
Заголовок сообщения: | конвертирование флагов |
уже отмечалось, что флаговые значения в представлении Форта отличаются от общепринятых (к примеру в Сях) преобразование Форт-флагов в Сишные и обратно: <pre> \ конвертировать сишный флаг в Форт-представление : >flag ( f --> flag ) 1 - INVERT ; \ конвертировать Фот-флаг в сишный : flag> ( flag --> f ) 0 <> 1 AND ; </pre> |
Автор: | _Harry [ Чт ноя 12, 2009 19:14 ] |
Заголовок сообщения: | |
Что в форте появились флаги??? Это имеется в виду Fаlse и True. Только мне сдается что любое значение отличное от 0 в Си будет True. Так что конвертировать нет необходимости. Или я не прав? |
Автор: | mOleg [ Чт ноя 12, 2009 19:24 ] |
Заголовок сообщения: | |
эм, флаги в Форте всегда были, только их значения отличаются от привычных для других ээ, языков. в Форте значение TRUE = -1 (то есть все биты уставновлены в 1) значение FALSE = 0 (все биты сброшены). Отдавать, например виндошному АПИ, значение -1 бывает черевато (не опознается как TRUE). |
Автор: | _Harry [ Чт ноя 12, 2009 19:27 ] |
Заголовок сообщения: | |
mOleg писал(а): Отдавать, например виндошному АПИ, значение -1 бывает черевато (не опознается как TRUE).
Хм ни разу с таким не сталкивался. Это скорее особености виндовых функций а не Си. Что скажут знатоки стандартов??? |
Автор: | Ilya [ Чт ноя 12, 2009 19:33 ] |
Заголовок сообщения: | |
_Harry писал(а): mOleg писал(а): Отдавать, например виндошному АПИ, значение -1 бывает черевато (не опознается как TRUE). Хм ни разу с таким не сталкивался. Это скорее особености виндовых функций а не Си. Что скажут знатоки стандартов??? Хоть я и не знаток стандартов, но столкнулся в именно с тем, что вызов API с произвольным значением <>0 не давало требуемого эффекта. Но это скорее "частный" (либа user32.dll ф-ции связанные с DDE) случай. Взял справочник по Сям и увидел там что TRUE = 1 (а не любое значение >0 как в Форте)!!! |
Автор: | VoidVolker [ Чт ноя 12, 2009 20:48 ] |
Заголовок сообщения: | |
mOleg писал(а): в Форте значение TRUE = -1
А разве не TRUE = "не ноль" ? |
Автор: | вопрос [ Чт ноя 12, 2009 23:11 ] |
Заголовок сообщения: | |
Цитата: А разве не TRUE = "не ноль" ? так должно быть, но бывает и иначе, по крайней мере ввиду индивидуальности каждого форта
|
Автор: | mOleg [ Пт ноя 13, 2009 07:55 ] |
Заголовок сообщения: | |
VoidVolker писал(а): А разве не TRUE = "не ноль" ?
все операции, возвращающие флаги во всех Фортах возвращают в качестве TRUE значение -1 (все биты установлены). однако, все операции анализирующие флаги (IF WHILE и т.п.) считают за TRUE отличное от нуля значение. |
Автор: | chess [ Пт ноя 13, 2009 12:02 ] |
Заголовок сообщения: | |
mOleg писал(а): преобразование Форт-флагов в Сишные и обратно:
\ конвертировать сишный флаг в Форт-представление : >flag ( f --> flag ) 1 - INVERT ; \ конвертировать Фот-флаг в сишный : flag> ( flag --> f ) 0 <> 1 AND ; Можно попроще: Код: \ конвертировать сишный флаг в Форт-представление
: >flag ( f --> flag ) NEGATE ; \ конвертировать Форт-флаг в сишный : flag> ( flag --> f ) 0<> NEGATE ; |
Автор: | _Harry [ Пт ноя 13, 2009 18:06 ] |
Заголовок сообщения: | |
Ilya писал(а): Взял справочник по Сям и увидел там что TRUE = 1 (а не любое значение >0 как в Форте)!!!
А вот я в википедии нашел. Код: typedef int bool;
#define FALSE 0 #define TRUE (-1) Похоже у сишников тоже "..... порядку нет как нет" |
Автор: | mOleg [ Пт ноя 13, 2009 18:11 ] |
Заголовок сообщения: | |
скорее википедия глючит. вообще, я так понимаю, проблема будет везде, где будет встречаться что-то подобное: <pre> if(value=true){someting}; </pre> если же будет что-то вроде: <pre> if(value){someting}; </pre> проблем быть вроде как не должно, хотя опять же как там будет преобразование типов в конкретном компиляторе проходить не известно. в Форте флаги выбраны вполне логично и удобно, чего я не скажу про Си |
Автор: | _Harry [ Пт ноя 13, 2009 18:21 ] |
Заголовок сообщения: | |
mOleg писал(а): скорее википедия глючит. Вполне может быть, но я уже не раз встречал именно такой расклад. Да и вполне известный факт что разработчики Си компиляторов не так уж жестко придерживаются стандарта. т.е. некотрые тоже поступают mOleg писал(а): вполне логично и удобно
|
Автор: | _Harry [ Пт ноя 13, 2009 18:35 ] |
Заголовок сообщения: | |
А вот еще чего нашел 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. |
Автор: | dynamic-wind [ Чт ноя 19, 2009 16:29 ] |
Заголовок сообщения: | |
mOleg писал(а): в Форте флаги выбраны вполне логично и удобно, чего я не скажу про Си
Просто то, что называется каноническим значением истины, различается: 1 и -1. Если каноническое значение 1, канонический способ инверсии есть операция "1 XOR" Если каноническое значение -1, канонический способ инверсии есть операция "NOT" У каждого выбора свои преимущества и недостатки. В 4те, например, менее удобно прибавлять булеву величину к целому, чем в С: sum += cond; против cond @ 1 AND sum +! |
Автор: | вопрос [ Чт ноя 19, 2009 17:49 ] |
Заголовок сообщения: | |
Цитата: в Форте флаги выбраны вполне логично и удобно, чего я не скажу про Си Вот всегда ли хорошо критиковать промышленный стандарт? Может там не всё так нелогично? Цитата: if(value=true){someting};
если внутри if() действие вместо сравнения ( = вместо ==) то компилятор проглотит, но результаты непредсказуемы - хотя GCC должен отловить как ошибку |
Страница 1 из 2 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |