Прежде всего, дайте мне совет, зачем они нам нужны при хранении информации
Компьютеры хранят данные в двоичном формате. Иногда нам полезно думать с точки зрения фактических битов, которые хранятся, и в этом случае наша знакомая десятичная система может быть немного неудобной (поскольку преобразования не являются прямыми); мы могли бы записать биты полностью, но часто это слишком громоздко, поскольку даже очень маленькие числа занимают много места для записи (например, десятичное 24521
является двоичным 101111111001001
).
Вместо этого мы склонны использовать основания, которые являются некоторой степенью двойки, поскольку они более компактны, чем двоичные, но при этом обладают тем свойством, что каждая «цифра» представляет точное количество битов в двоичном представлении. Например, шестнадцатеричная (с основанием 16) цифра представляет четыре бита («полубайт») с цифрами от 0
до F
(десятичная 15
/ двоичная 1111
); восьмеричная цифра (с основанием 8) представляет три бита с цифрами от 0
до 7
(двоичный 111
).
Наш предыдущий пример десятичного числа 24521
будет 5FC9
в шестнадцатеричном формате или 57711
в восьмеричном: начиная справа вы можете видеть, что каждая цифра соответственно представляет 4 и 3 бита в приведенном выше двоичном представлении. Поэтому нам, людям, (относительно) легко визуализировать двоичное представление, глядя на эти компактные представления в других базах.
Кроме того, какие типы значений должны храниться в отмеченных системах?
Я не уверен, что вы имеете в виду. Как указывалось выше, одни и те же ценности могут быть представлены во всех этих системах. В MySQL мы можем указать двоичный литерал, добавив к нему 0b
, и шестнадцатеричный литерал, добавив к нему 0x
. MySQL не поддерживает восьмеричные литералы.
кто-нибудь может объяснить, как он вычисляет это?
Оператор <<
выполняет побитовый сдвиг влево. То есть он сдвигает биты левого операнда влево на количество позиций, заданное правым операндом.
Для каждой позиции биты целого числа сдвигаются влево, значение, представленное этими битами, увеличивается вдвое. Это похоже на эффект сдвига цифр влево в нашей десятичной системе, при котором значения увеличиваются в десять раз (например, 50, сдвинутое на одно место влево, дает 500, то есть десятикратное увеличение; в двоичное 110
(десятичное число 6), сдвинутое на одну позицию влево, дает 1100
(десятичное число 12), что является двукратным увеличением).
В вашем случае сдвиг битов числа 50 (т.е. 110010
) два места влево дает 2 двукратных увеличения (т.е. четырехкратное увеличение в целом): 11001000
- десятичное число 200.
person
eggyal
schedule
16.05.2012