Linq преобразует операторы в операторы SQL и выполняет их в базу данных.
blockquote>Теперь это преобразование происходит только для членов сущностей, инициализаторов и свойств навигации сущности. Таким образом, чтобы достичь функции или получить сравнение свойств, нам нужно сначала преобразовать их в список в памяти, а затем применить функцию для извлечения данных.
Поэтому в совокупности
var debts = storeDB.Orders.toList() .Where(o => o.Paid == false) .OrderByDescending(o => o.DateCreated);
Дополнение к двум появилось, когда кто-то понял, что «становится отрицательным», вычтя 1
из 0
и позволив откатить биты, на самом деле, сделал упрощенную арифметику со знаком, потому что не нужно делать никаких специальных проверок, чтобы проверить, является ли число отрицательным или не. Другие решения дают вам разрыв между -1
и 0
. Единственная странность в дополнении к двум состоит в том, что в вашем диапазоне вы получаете еще одно отрицательное число, чем положительное число. Но тогда другие решения дают вам странные вещи, такие как +0
и -0
.
Согласно Википедии, само название происходит от математики и основано на способах упрощения вычитания, когда у вас ограниченное количество мест. Система на самом деле является «дополнительным дополнением», и поскольку двоичная система является базой два, она становится «дополнением к двум». И оказывается, что «свой комплемент» назван в честь «уменьшенного радикального дополнения», то есть радиуса минус один. Если вы посмотрите на это для десятичного числа, значения за именами имеют больше смысла.
В системе десятичной нумерации основание равно десять :
В системе двоичной нумерации основание равно два :
Источник: https://en.wikipedia.org/wiki/Method_of_complements
Вы можете сделать то же самое на других базах. С десятичным числом у вас будет 9-дополнение, где каждая цифра X заменена на 9-X, а 10-кратное дополнение числа является дополнением до 9 плюс один. Затем вы можете вычесть, добавив десятичное дополнение, предполагая фиксированное количество цифр.
Пример - в 4-значной системе с учетом вычитания
0846
-0573
=0273
Сначала найдите дополнение к 573 до 9, что составляет 9-0 9-5 9-7 9-3 или 9426
дополнение до 10 к 573 равно 9426 + 1 или 9427
Теперь добавьте дополнение до 10 и отбросьте все, что содержит 4 цифры
0846
+9427 .. 10's complement of 573
= 10273 .. toss the 'overflow' digit
= 0273 .. same answer
Очевидно, это простой пример. Но аналогия уместна. Интересно, какое отрицательное значение в 4-значном дополнении до 10? 5000!
Что касается этимологии, я бы предположил, что дополнение термина 1 является дополнением в том же смысле, что дополнительный угол от геометрии равен 90 градусам минус угол, то есть это часть, которая остается, когда вы вычитаете данное из какое-то стандартное значение. Не уверен, однако, в том, что дополнение "2" имеет смысл.