Всегда ли ИСТИНА имела ненулевое значение? - PullRequest
21 голосов
/ 19 сентября 2008

У меня есть сотрудник, который утверждает, что TRUE раньше определялся как 0, а все остальные значения были FALSE. Я мог бы поклясться, что на каждом языке, с которым я работал, если бы вы могли даже получить значение для логического значения, значение FALSE равно 0. Раньше TRUE было 0? Если да, то когда мы перешли?

Ответы [ 22 ]

1 голос
/ 19 сентября 2008

Я помню, у PL / 1 не было логического класса. Вы можете создать бит и присвоить ему результат логического выражения. Затем, чтобы использовать его, вы должны были помнить, что 1 было ложным, а 0 - истинным.

1 голос
/ 20 сентября 2008

В языке C до C ++ не было такого понятия, как логическое значение. Условия были сделаны путем тестирования целых. Ноль означает ложь, а любой ненулевой означает истину. Чтобы вы могли написать

if (2) {
  alwaysDoThis();
} else {
  neverDothis();
}

К счастью, C ++ разрешил выделенный логический тип.

1 голос
/ 22 сентября 2008

Я слышал и использовал старые компиляторы, где true> 0 и false <= 0. </p>

Это одна из причин, по которой вы не хотите использовать if (указатель) или if (число) для проверки нуля, они могут неожиданно получить ложное значение.

Точно так же я работал в системах, где NULL не был равен нулю.

1 голос
/ 19 сентября 2008

По большей части false определено как 0, а true не равно нулю. Некоторые языки программирования используют 1, некоторые используют -1, а некоторые используют любое ненулевое значение.

Для оболочек Unix они используют противоположное соглашение.

Большинство команд, которые запускаются в оболочке Unix, на самом деле являются небольшими программами. Они возвращают код завершения, чтобы вы могли определить, была ли команда успешной (значение 0) или не получилась ли она по какой-либо причине (1 или более, в зависимости от типа ошибки).

Используется в интерпретаторах оболочки sh / ksh / bash в командах if / while / till для проверки условий:

if command
then
   # successful
fi

Если команда выполнена успешно (т. Е. Возвращает нулевой код выхода), выполняется код внутри оператора. Обычно используемой командой является команда [, которая является псевдонимом для тестовой команды.

1 голос
/ 20 сентября 2008

Самое смешное, что это зависит от языка, с которым вы работаете. В Lua равно true == ноль для производительности. То же самое для многих системных вызовов в C.

1 голос
/ 19 сентября 2008

Легко запутаться, когда в bash операторы true / false возвращают:

$ false; echo $?
1
$ true; echo $?
0
0 голосов
/ 09 сентября 2016

SQL Server Database Engine оптимизирует хранение битовых столбцов. Если в таблице 8 или менее битовых столбцов, столбцы сохраняются как 1 байт. Если есть от 9 до 16 битных столбцов, столбцы сохраняются как 2 байта и так далее. Строковые значения TRUE и FALSE могут быть преобразованы в битовые значения: TRUE преобразуется в 1, а FALSE - в 0. Преобразование в бит повышает любое ненулевое значение до 1.

Каждый язык может иметь 0 как true или false Так что прекратите использовать число используйте слова true Лол Или т и е 1 байт памяти

0 голосов
/ 19 сентября 2008

На любом языке, на котором я когда-либо работал (возвращаясь к BASIC в конце 70-х), false считался 0, а true был ненулевым.

0 голосов
/ 19 сентября 2008

Не помню, чтобы TRUE был 0. 0 - это то, что программист на С вернется, чтобы указать на успех. Это можно спутать с TRUE.

Это не всегда 1 тоже. Это может быть -1 или просто ненулевое значение.

0 голосов
/ 19 сентября 2008

DOS и коды выхода из приложений обычно используют 0 для обозначения успеха и ненулевое значение для отказа какого-либо типа!

Коды ошибок DOS - 0-255, и при тестировании с использованием синтаксиса errorlevel означают что-либо выше или включая указанное значение, поэтому следующее соответствует 2 и выше для первого перехода, 1 - второму и 0 (успех) - последний!

IF errorlevel 2 goto CRS
IF errorlevel 1 goto DLR
IF errorlevel 0 goto STR
...