Имеет ли значение ИСТИНА всегда отличное от нуля значение?
У меня есть сотрудник, который утверждает, что ИСТИНА используется как 0, а все остальные значения FALSE. Я мог бы поклясться, что на каждом языке, с которым я работал, если вы даже можете получить значение для логического значения, то значение для FALSE равно 0. Был ли ИСТИНА равным 0? Если да, то когда мы переключались?
Ответы
Ответ 1
0/не-0, о котором вас смущает коллега, вероятно, относится к тому, что люди используют числовые значения как возвращаемое значение, указывающее успех, а не правду (то есть в сценариях bash и некоторых стилях C/С++).
Использование 0 = успех позволяет значительно повысить точность определения причин отказа (например, 1 = отсутствующий файл, 2 = недостающий конечности и т.д.).
В качестве примечания: в Ruby единственными ложными значениями являются nil и false. 0 истинно, но не в отличие от других чисел. 0 истинно, потому что это экземпляр объекта 0.
Ответ 2
Это может быть ссылка на код результата 0, который в большинстве случаев после запуска процесса, то есть код результата из 0: "Привет, все работает нормально, здесь нет проблем".
Ответ 3
Я работал в компании с большим количеством старого кода на C. Некоторые из общих заголовков определяли свои собственные значения для TRUE и FALSE, а некоторые действительно имели TRUE как 0 и FALSE как 1. Это привело к "истинам войн":
/* like my constants better */
#undef TRUE
#define TRUE 1
#undef FALSE
#define FALSE 0
Ответ 4
Если ничего другого, bash оболочки по-прежнему используют 0 для true, а 1 для false.
Ответ 5
Несколько функций в стандартной библиотеке C возвращают целое число "код ошибки" в качестве результата. Поскольку noErr определяется как 0, быстрая проверка может быть "если он 0, то Ok". Это же соглашение переносится в код результата "Unix"; то есть целое число, которое дало некоторое подозрение о том, как данный процесс завершился.
В сценариях оболочки Unix доступен код результата только что выполненной команды и типично используется для обозначения того, была ли команда "успешной" или нет, с 0 означает успех и что-то еще определенное условие неуспеха.
С учетом этого все тестовые конструкции в сценариях оболочки используют "успех" (то есть код результата 0) для обозначения TRUE, а что-то еще - FALSE.
На совершенно другой плоскости цифровые схемы часто используют "отрицательную логику". то есть даже если 0 вольт называется "двоичным 0", а некоторое положительное значение (обычно + 5v или + 3.3v, но в настоящее время оно редко встречается + 1.8v) называется "двоичным 1", некоторые события "утверждаются", по данному штырю, идущему в 0. Я думаю, что есть некоторые шумоподобные преимущества, но я не уверен в причинах.
Обратите внимание, что в этом нет ничего "древнего" или "времени переключения". Все, что я знаю об этом, основано на старых соглашениях, но сегодня актуально и актуально.
Ответ 6
Я не уверен, но могу сказать вам следующее: трюки, основанные на основополагающей природе TRUE и FALSE, подвержены ошибкам, потому что определение этих значений остается за разработчиком языка (или, на наименее, спецификатор).
Ответ 7
Системные вызовы в стандартной библиотеке C обычно возвращают -1 при ошибке и 0 при успешном завершении. Кроме того, вычисленный оператор if Fotran (и, вероятно, все еще делает) может перейти к одному из трех номеров строк в зависимости от того, какое условие оценивается меньше, равно или больше нуля.
например: IF (I-15) 10,20,10
будет проверять условие перехода я == 15 к строке 20, если значение true (равно нулю) и строка 10 в противном случае.
Сэм прав насчет проблем, связанных с конкретными знаниями о деталях реализации.
Ответ 8
Общее правило:
Тем не менее, если вы находитесь на языке, который позволяет определить TRUE FALSE, определить его и всегда использовать константы.
Ответ 9
Даже сегодня на некоторых языках (Ruby, lisp,...) 0 истинно, потому что все, кроме nil, истинно. Чаще всего 1 верно. Это обычная идея, поэтому иногда считается, что хорошая практика не полагаться на 0 как ложную, но делать явный тест. Java требует, чтобы вы это сделали.
Вместо этого
int x;
....
x = 0;
if (x) // might be ambiguous
{
}
Сделать явно
if (0 != x)
{
}
Ответ 10
Я помню, как программировал VB в форме доступа, где True был -1.
Ответ 11
Я помню, что PL/1 не имел логического класса. Вы можете создать бит и присвоить ему результат булевского выражения. Затем, чтобы использовать его, вы должны были помнить, что 1 был ложным, а 0 - истинным.
Ответ 12
Легко запутаться, когда bash истинные/ложные операторы return наоборот:
$ false; echo $?
1
$ true; echo $?
0
Ответ 13
По большей части false определяется как 0, а true - ненулевое. Некоторые языки программирования используют 1, некоторые используют -1, а некоторые используют любое ненулевое значение.
Однако для оболочек Unix они используют противоположное соглашение.
Большинство команд, выполняющихся в оболочке Unix, на самом деле являются небольшими программами. Они передают код выхода, чтобы вы могли определить, была ли команда успешной (значение 0), или по какой-либо причине она потерпела неудачу (1 или более, в зависимости от типа отказа).
Это используется в интерпретаторах оболочки sh/ksh/ bash в командах if/while/until для проверки условий:
if command
then
# successful
fi
Если команда выполнена успешно (т.е. возвращает нулевой код выхода), выполняется код внутри оператора. Обычно используется команда [command, которая является псевдонимом для тестовой команды.
Ответ 14
Самое смешное, что это зависит от языка, с которым вы работаете. В Lua истинно == zero для производительности. То же самое для многих системных вызовов в C.
Ответ 15
На языке C, перед С++, не было такой вещи, как логическое. Условные операции выполнялись путем тестирования ints. Zero означает false, и любое ненулевое значение означает true. Поэтому вы можете написать
if (2) {
alwaysDoThis();
} else {
neverDothis();
}
К счастью, С++ допускает выделенный булев тип.
Ответ 16
На любом языке, на котором я когда-либо работал (возвращается в BASIC в конце 70-х), false считается 0, а true - ненулевым.
Ответ 17
Я не могу вспомнить TRUE
0
.
0
- это то, что программист C вернется, чтобы указать на успех. Это можно путать с TRUE
.
Это не всегда 1
. Это может быть -1
или просто отличное от нуля.
Ответ 18
Для языков без встроенного логического типа единственное соглашение, которое я видел, это определить TRUE как 1 и FALSE как 0. Например, в C оператор if
выполнит предложение if, если условное выражение вычисляет значение, отличное от 0.
Я даже когда-то видел документ с инструкциями по кодированию, который специально сказал, чтобы не переопределять TRUE и FALSE.:)
Если вы используете язык с встроенным логическим значением, например С++, то ключевые слова true
и false
являются частью языка, и вы не должны полагаться на то, как они действительно реализованы.
Ответ 19
В таких языках, как C, не было логического значения, поэтому вы должны были определить свой собственный. Могли ли они работать над нестандартными переопределениями BOOL?
Ответ 20
DOS и коды выхода из приложений обычно используют 0, чтобы означать успех и ненулевой, чтобы означать отказ какого-либо типа!
Коды ошибок DOS равны 0-255, а при тестировании с использованием синтаксиса "errorlevel" означают что-либо выше или включая указанное значение, поэтому следующие совпадения 2 и выше относятся к первому goto, 1 ко второму и 0 (успех) к последний!
IF errorlevel 2 goto CRS
IF errorlevel 1 goto DLR
IF errorlevel 0 goto STR
Ответ 21
Я слышал и использовал более старые компиляторы, где true > 0, и false <= 0.
Это одна из причин, по которой вы не хотите использовать if (указатель) или if (number) для проверки нуля, они могут неожиданно ошибочно вычислять false.
Аналогично, я работал над системами, где NULL не был равен нулю.
Ответ 22
SQL Server Database Engine оптимизирует хранение столбцов бит. Если в таблице есть 8 или менее столбцов, столбцы хранятся как 1 байт. Если имеется от 9 до 16 бит столбцов, столбцы хранятся как 2 байта и так далее.
Строковые значения TRUE и FALSE могут быть преобразованы в битовые значения: TRUE преобразуется в 1, а FALSE преобразуется в 0.
Преобразование в бит повышает ненулевое значение до 1.
Каждый язык может иметь 0 как истинный или ложный
Поэтому прекратите использование слов с использованием числа true
Лол
Или t и f 1 байт хранения