Битовая операция и реализация SQL

SQL

Что такое битовая операция?

Все числа в программе хранятся в двоичной форме в памяти компьютера. Битовая операция предназначена для непосредственной работы с двоичными битами целых чисел в памяти.

Вот краткое объяснение битовых операций из Википедии:

In digital computer programming, a bitwise operation operates on one or more bit patterns or binary numerals at the level of their individual bits. It is a fast, simple action directly supported by the processor, and is used to manipulate values for comparisons and calculations. On simple low-cost processors, typically, bitwise operations are substantially faster than division, several times faster than multiplication, and sometimes significantly faster than addition. While modern processors usually perform addition and multiplication just as fast as bitwise operations due to their longer instruction pipelines and other architectural design choices, bitwise operations do commonly use less power because of the reduced use of resources.

维基百科对于位运算的介绍

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

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

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

Но в современных процессорах из-за их более длинных конвейеров команд и других структурных особенностей операции сложения и умножения могут быть такими же быстрыми, как битовые операции, но поскольку они более ресурсоэффективны, битовые операции обычно менее энергоэффективны.

логические операторы для побитовых операций

  1. & и оператор

Суть операции побитового И заключается в выполнении логической операции И побитно в соответствии с соответствующими двоичными числами двух данных, участвующих в операции.

Для отрицательных чисел оперируйте их дополнением.

  1. |операция ИЛИ

Суть операции побитового ИЛИ заключается в логическом ИЛИ двух данных, участвующих в операции, побитно в соответствии с соответствующим двоичным числом.

Разница между логическим оператором || и побитовым оператором ИЛИ | заключается в следующем: Оператор условного ИЛИ (||) выполняет логическое ИЛИ логических операндов, но оценивает второй операнд только при необходимости.

Разница между x || y , x | y в том, что если x истинно, то y не оценивается (поскольку результат операции ИЛИ истинен независимо от значения y). Это называется расчетом «короткого замыкания».

  1. ^ битовое исключающее ИЛИ

Суть побитовой операции XOR заключается в выполнении логической операции XOR побитно согласно соответствующим двоичным числам двух данных, участвующих в операции. Результат соответствующего бита истинен только тогда, когда двоичные числа соответствующего бита являются взаимоисключающими.

  1. ~ немного нет

Суть побитовой операции НЕ заключается в выполнении логической операции НЕ побитно в соответствии с соответствующими двоичными числами двух данных, участвующих в операции.

Приложения

Например, есть компания, в которой три директора a, b и c (в порядке убывания).Для продуктов, продаваемых компанией, директора могут предоставлять расценки, но не каждый директор должен предоставлять расценки, поэтому существует общее количество из a,b,c,ab,ac,bc,abc семь случаев. Каждый супервайзер, делающий предложение по продукту, обязан вести запись, и окончательное действительное предложение является самым высоким из них.

Теперь составьте таблицу цен, в которой поля ap, bp и cp представляют котировки, предоставленные каждым надзорным органом соответственно; поле p представляет всех надзорных органов, предоставивших котировки, где a равно 1, b равно 2 и c равно 4, а поле p хранит сумму этих трех чисел.

Например, супервизор b предоставляет котировку 100, супервизор c предоставляет котировку 93, тогда ap=null, bp=100, cp=93, p=6 (т.е. 2+4), и действительной котировкой является котировка b 100 .

Чтобы определить, включена ли цитата супервайзера, вы можете использовать операцию AND:

1 преобразуется в двоичный как 0001 2 преобразуется в двоичный вид как 0010 4 преобразуется в двоичный код как 0100

Когда p равно 6: 6 преобразуется в двоичный код как 0110

6 & 1, то есть 0110&0001=0000=0, означает, что предложение супервайзера a не включено.

6 и 2, то есть 0110&0010=0010>0, означает, что включена цитата супервайзера b.

По тому, больше ли оно 0, можно судить, включена ли цитата супервайзера;

Ниже приведены SQL-запросы для создания таблиц, вставки данных и запросов с использованием побитовых операций.

CREATE TABLE price
(
 id INT PRIMARY KEY,
 ap INT DEFAULT NULL,
 bp INT DEFAULT NULL,
 cp INT DEFAULT NULL,
 p INT DEFAULT NULL
);

INSERT INTO price VALUES
(1,NULL,100,93,6),
(2,188,170,203,7),
(3,NULL,14,NULL,2);

INSERT INTO price VALUES
(4,NULL,NULL,NULL,NULL),
(5,44,55,66,7),
(6,NULL,NULL,430,4);


SELECT
id '产品编号',
CASE WHEN p&ap>0 THEN ap
     WHEN p&bp>0 THEN bp
     WHEN p&cp>0 THEN cp
     ELSE '该产品无有效报价'
     END '有效报价',
CASE WHEN p&ap>0 THEN 'ap'
     WHEN p&bp>0 THEN 'bp'
     WHEN p&cp>0 THEN 'cp'
     ELSE '无'
     END '报价主管'
FROM price;

查询结果

马奈(晚年代表作)福利·贝热尔的吧台
—— Коллегия Безумия Берже Мане (представительная работа в последние годы его жизни)