У меня есть сотрудник, который утверждает, что ИСТИНА используется как 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
Общее правило:
-
Корпуса (включая DOS) используют "0" как "Нет Ошибка "... не обязательно верно.
-
Языки программирования используют ненулевые для обозначения истины.
Тем не менее, если вы находитесь на языке, который позволяет определить 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 байт хранения