Почему «Да» имеет значение -1 в базе данных MS Access? - PullRequest
44 голосов
/ 12 января 2012

Я смотрю на связанные данные в MS Access.

В полях "Да / Нет" содержится значение -1 для ДА и 0 для НЕТ.Может ли кто-нибудь объяснить, почему такое нелогичное значение используется для «Да»?(Очевидно, это должны быть 1 и 0)

Я думаю, что должна быть веская причина, и я хотел бы знать это.

Ответы [ 2 ]

48 голосов
/ 12 января 2012

Двоичное представление False равно 0000000000000000 (количество используемых битов зависит от реализации).Если вы выполняете над ним двоичную операцию NOT, она будет изменена на 1111111111111111, то есть True, но это двоичное представление целого числа со знаком -1.

Бит 1в самой значимой позиции сигнализирует отрицательное число для чисел со знаком.Изменение знака числа происходит путем инвертирования всех битов и добавления 1. Это называется дополнением Two .

Давайте изменим знак 1111111111111111.Первый инверт;мы получаем: 0000000000000000

Затем добавим одно: 0000000000000001, это 1.

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


ОБНОВЛЕНИЕ

Кроме того, при сравнении этих значений не сравнивайте

x = -1

или

x = 1

, сравните

x <> 0

это всегда дает правильный результат, независимо от используемого соглашения.В большинстве реализаций любое значение, отличное от нуля, рассматривается как True.

0 голосов
/ 12 января 2012

«Да» равно -1, потому что это не что-то еще.

При работе с продуктами Microsoft, особенно такими старыми, как Access, не думайте, что есть веская причина для любой выбор дизайна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...