Имеет ли значение ИСТИНА всегда отличное от нуля значение?

У меня есть сотрудник, который утверждает, что ИСТИНА используется как 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 байт хранения