Русские Блоги
Двоичные, восьмеричные и шестнадцатеричные числовые константы в разных языках программирования обозначают префикс 0b 0 0x
в заключении
Двоичный префикс 0b
восьмеричный префикс 0
шестнадцатеричный префикс 0X
| Основное число (основание системы счисления) | Приставка | пример |
|---|---|---|
| Двоичный | 0b 0B | 0b11 = 2+1=3 |
| Восьмеричный | 0o 0O 0 | 0o11 = 8+1=9 |
| Десятичный | Без префикса | 11 = 11 |
| Шестнадцатеричный шестнадцатеричный | 0x 0X | 0x11 |
В десятичном формате просто напишите значение напрямую.
Восьмеричная система более особенная, и ее представление на разных языках немного отличается.
- Числовые константы на разных языках указывают на различия
- JavaScript / Python: префикс восьмеричного значения может быть 0 0o 0O Доступны все три.
- Java / C: для восьмеричных значений можно использовать только один префикс 0 , нельзя использовать 0o 0O , В противном случае будет сообщено об ошибке (содержание ошибки см. В конце статьи)
Что касается Java с участием C в Восьмеричные числовые константы могут начинаться только с 0 , Может быть потому, что эти два скомпилированных языка, и JavaScript с участием Python Оба являются интерпретируемыми языками.
Тестирование на разных языках
- JavaScript
0b11 3 011 9 0o11 9 11 11 0x11 17
0b11 3 011 9 0o11 9 11 11 0x11 17
wuyujin@ubuntu18:~$ more RadixPrefixTest.java public class RadixPrefixTest public static void main(String[] args) System.out.println(0b11); System.out.println(011); // Восьмеричный, особая точка, префикс 0. System.out.println(11); System.out.println(0x11); > > wuyujin@ubuntu18:~$ javac RadixPrefixTest.java && java RadixPrefixTest 3 9 11 17 wuyujin@ubuntu18:~$

- C
wuyujin@ubuntu18:~$ more RadixPrefixTest.c # include int main() printf("%d\n", 0b11); printf("%d\n", 011); printf("%d\n", 11); printf("%d\n", 0x11); return 0; > wuyujin@ubuntu18:~$ gcc RadixPrefixTest.c && ./RadixPrefixTest 3 9 11 17 wuyujin@ubuntu18:~$Восьмеричный специальный
Для восьмеричных числовых констант в Java и C можно использовать только префиксы. 0 , нельзя использовать 0o с участием 0O , В противном случае будет сообщено об ошибке (синтаксическая подсказка также будет выделена красным для предупреждения).
- C : error: invalid suffix «o11» on integer constant

- Java : error: illegal start of expression

Интеллектуальная рекомендация
Двоичное преобразование в десятичное, восьмеричное, шестнадцатеричное
1. десятичное преобразование двоичного кода Python 2. восьмеричное двоичное преобразование Python 3. шестнадцатеричное двоичное преобразование Python.
Двоичное, восьмеричное, десятичное, шестнадцатеричное преобразование
Это сообщение в блоге в основном объясняет метод и логику шестнадцатеричного преобразования, используемого в программировании. В конце концов, в компьютерных языках наиболее примитивным основным шестн.
Десять эволюции в шестнадцатеричный, восьмеричный, двоичный.
Десять эволюции в шестнадцатеричный, восьмеричный, двоичный Пример проверки десятичного оборота, десятичное преобразование шестнадцатеричное: Код Demo: Резюме: 1. Проблемы, которые были разрешены снов.
Двоичный, десятичный, восьмеричный, шестнадцатеричный преобразование
Десятичная: двоичный: шестнадцатеричный: двоичный: 0001 — 1 &.
16-ти ричная система исчисления
Шестнадцатеричная система счисления (шестнадцатеричные числа) — позиционная система счисления по целочисленному основанию 16. Обычно в качестве шестнадцатеричных цифр используются десятичные цифры от 0 до 9 и латинские буквы от A до F для обозначения цифр от 10 до 15 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F).
Широко используется в низкоуровневом программировании и вообще в компьютерной документации, поскольку в современных компьютерах минимальной единицей памяти является 8-битный байт, значения которого удобно записывать двумя шестнадцатеричными цифрами. Такое использование началось с системы IBM/360, где вся документация использовала шестнадцатеричную систему, в то время как в документации других компьютерных систем того времени (даже с 8-битными символами, как, например, PDP-11 или БЭСМ-6) использовали восьмеричную систему.
В стандарте Юникода номер символа принято записывать в шестнадцатеричном виде, используя не менее 4 цифр (при необходимости — с ведущими нулями) .
В математике систему счисления принято писать в подстрочном знаке. Например, десятичное число 1443 можно записать как 144310 или как 5A316.
разных языках программирования для записи шестнадцатеричных чисел используют различный синтаксис:
В Ада и VHDL такие числа указывают так: «16#5A3#».
В Си и языках схожего синтаксиса, например, в Java, используют префикс «0x». Например, «0x5A3».
В некоторых ассемблерах используют букву «h», которую ставят после числа. Например, «5A3h». При этом, если число начинается не с десятичной цифры, впереди ставится «0» (ноль) : «0FFh» (25510)
Другие ассемблеры (AT&T, Motorola), а также Паскаль и некоторые версии Бэйсика используют префикс «$». Например, «$5A3».
Некоторые иные платформы, например ZX Spectrum в своих ассемблерах (MASM, TASM, ALASM, GENS и т. д. ) использовали запись #5A3, обычно выровненную до одного или двух байт: #05A3.
Другие версии Бэйсика используют для указания шестнадцатеричных цифр сочетание «&h». Например, «&h5A3».
В Unix-подобных операционных системах (и многих языках программирования, имеющих корни в Unix/linux) непечатные символы при выводе/вводе кодируются как \xCC, где CC — шестнадцатеричный код символа.
Перевод чисел из шестнадцатеричной системы в десятичную
Для перевода шестнадцатеричного числа в десятичное необходимо это число представить в виде суммы произведений степеней основания шестнадцатеричной системы счисления на соответствующие цифры в разрядах шестнадцатеричного числа.
Например, требуется перевести шестнадцатеричное число 5A3 в десятичное. В этом числе 3 цифры. В соответствии с вышеуказанным правилом представим его в виде суммы степеней с основанием 16:
5A316=3·160+10·161+5·162
=3·1+10·16+5·256=3+160+1280=144310
Для перевода многозначного двоичного числа в шестнадцатеричную систему нужно разбить его на тетрады справа налево и заменить каждую тетраду соответствующей шестнадцатеричной цифрой.
Например: 0101101000112=0101 1010 0011=5A316Источник: Википедия.
Остальные ответы
0x: переход на общедоступный блокчейн
0x — это префикс, который используется для указания шестнадцатеричного числа в программировании и компьютерных науках. Шестнадцатеричная система счисления использует 16 символов для представления чисел: цифры от 0 до 9 и буквы от A до F, где каждая буква представляет числовое значение, начиная от 10 для A, 11 для B и так далее до 15 для F.
Примеры использования 0x в программировании:
1. Определение цвета в графических приложениях:
Цвет может быть задан в виде шестнадцатеричного числа, где первые два символа обозначают канал красного цвета, следующие два символа — зеленого, а последние два символа — синего. Например, 0xFF0000 представляет красный цвет, а 0x00FF00 — зеленый. Все значения компонентов цвета находятся в диапазоне от 0x00 до 0xFF.
2. Разработка программирования микроконтроллеров:
Микроконтроллеры широко используют шестнадцатеричное представление чисел для программирования периферийных устройств, таких как порты ввода-вывода и регистры конфигурации. Например, чтобы установить бит 4 в регистре конфигурации, требуется записать значение 0x10 в нужный регистр.
3. Работа с сетевыми протоколами:
Сетевые протоколы, такие как TCP и UDP, используют шестнадцатеричное представление для кодирования различных полей в заголовках пакетов. Например, порт назначения в TCP-заголовке задается в виде шестнадцатеричного числа, где 0x50F0 означает порт 20720.
Примеры кода на языке Python с использованием 0x:
# Пример задания цвета красного (255), зеленого (0) и синего (0)
# Пример записи значения в регистр конфигурации микроконтроллера
# Пример использования шестнадцатеричных значений для IP-адресов
ip_address = 0xC0A80101 # ip-адрес 192.168.1.1
Представление целых чисел в GAS
Целочисленные константы могут быть представлены в виде бинарного числа, записанного в двоичной системе счисления или числа, записанного в системе счисления десятичной, восьмеричной или шестнадцатеричной .
Бинарным числом, представленным в двоичной системе счисления, предваряет 0b или 0B, и следующие за ними цифры 0 или 1.
Числом, представленным в восьмеричной системе счисления, относятся константы, имеющие впереди 0 одно и более допустимых восьмеричных чисел 01234567
К числам, представленным в десятичной системе счисления, относятся константы, имеющие впереди первую ненулевую цифру и/или следуемые за ней одно или более десятичных цифр (0123456789).
К числам, представленным в шестнадцатеричной системе счисления, относятся константы, начинающиеся с 0x или ‘0X и следуемых за ними шестнадцатеричных цифр 0123456789abcdefABCDEF.
При этом вне зависимости от используемой системы счисления, саму запись константного числа в непосредственном операнде необходимо предварять префиксом $. Иначе, оно будет определено как прямой адрес памяти, который тоже можно отнести к константному значению.
2. Использование систем счисления
В таблице 1 приводится соотношение перечисленных выше систем счисления, применяемых для представления целых чисел в константных выражениях и операциях вывода целых чисел.
3 бит 2 бит 1 бит 0 бит DEC BIN OCT HEX 0 0 0 0 0 0b0000 00 0x00 0 0 0 1 1 0b0001 01 0x01 0 0 1 0 2 0b0010 02 0x02 0 0 1 1 3 0b0011 03 0x03 0 1 0 0 4 0b0100 04 0x04 0 1 0 1 5 0b0101 05 0x05 0 1 1 0 6 0b0110 06 0x06 0 1 1 1 7 0b0111 07 0x07 1 0 0 0 8 0b1000 10 0x08 1 0 0 1 9 0b1001 11 0x09 1 0 1 0 10 0b1010 12 0x0A 1 0 1 1 11 0b1011 13 0x0B 1 1 0 0 12 0b1100 14 0x0С 1 1 0 1 13 0b1101 15 0x0D 1 1 1 0 14 1110B 16 0x0E 1 1 1 1 15 0b1111 17 0x0F Начиная со школы мы привыкли оперировать с числами в десятичной системе счисления, а вычислительная техника в двоичной, программисты же пишущие на языке GNU С/Assembler для удобства в шестнадцатеричной, потому что она позволяет легко разделить байты пополам на 4-ре бита. Восьмеричная же система счисления используется в основном для задания системными администраторами прав доступа к объектам и устройствам файловой системы, потому что позволяет разбивать данные на три бита.
Для перевода из одной системы счисления в другую можно использовать специальные калькуляторы или на основе таблицы 1, простым пересчетом выполнить расчет следующим образом.
К примеру число в двоичной системе счисления 0b1000, которое соответствует 8 в десятичной системе счисления, добавляем впереди ещё пару бит 1 и 0, получив таким образом бинарное число 0b101000. Для перевода в шестнадцатеричную систему счисления согласно таблице 1 необходимо выбрать в соответствие с состояниями единичных битов из столбца HEX для старших двух битов 2, а младших четырех – 8, что вместе составит 0x28. Для бинарного числа 0b11101000 по той же таблице получим для старших четырех битов из столбца HEX E, а младших – 8, что вместе составит 0xE2. Как видно из приведенных примеров числа четные, в то время как нечетное число будет иметь в младшем разряде всегда 1.
Теперь на основе той же таблицы произведем перевод десятичного числа 255 в двоичное. Пользуясь нехитрым правилом, что нечетное число в нулевом, младшем бите равно 1, записываем начальное константное выражение 0b1, а само десятичное число 255 уменьшая на один получая тем самым значение 254. Для определение остальных битов нам нужно, основываясь на таблице 1, построить дискретный ряд соответствующий их порядку следования в двоичной системе. Если посмотреть внимательно на десятичные значения в строках таблицы 1, имеющие одиночное значение в битах с нулевого по четвертый, они меняются строго по формуле – 2 N .
Соответственно, Бит 4 = 2 4 = 16, Бит 5 = 32, Бит 6 = 64, Бит 7 = 128. На этом остановимся, потому что единичное значение в восьмом бите равняется 256. Тем самым мы определили старший, значащий бит 7 разбираемого десятичного числа в двоичной системе отсчета и можем записать как 0b10000001.
Затем, отнимаем 128 от 254 получаем 126 и определяем для него старший бит 6, который равняется десятичному значению 64 и записываем в двоичное выражение 0b11000001. Далее, таким же образом получаем двоичные значения:
0b11100001 – 62 от 32 получим единичное значение в бите 5
0b11110001 – 30 от 16 получим единичное значение в бите 4
0b11111001 – 14 от 8 получим единичное значение в бите 3
0b11111101 – 6 от 4 получим единичное значение в бите 2
0b11111111 – 2 от 2 получим единичное значение в бите 1
В остатке мы получим нуль, подтверждая тем самым, что данный способ работает.Теперь в соответствие с таблицей 1 переводим полученное двоичное число 0b11111111 в восьмеричную систему отсчета, аккуратно разделив его по три бита 0b11 = 03 0b111=07 0b111=07, которое в итоге равно восьмеричному значению числа 0377 и равное десятичному значению числа 255.
Для перевода в шестнадцатеричную систему счисления разделим двоичное число 0b11111111 по четыре бита – 0b1111=0xF и 0b1111=0xF и с помощью той же таблицы 1 приводим его к шестнадцатеричному значению 0xFF.
3. Размерность целых чисел без учета знака
Размерность целых чисел без учета знака определяется их размером, используемым в процессе вычислительных операций с ними в зависимости от выбранного типа данных. GNU Assembler оперирует целочисленными данными в соответствие с фундаментальными типами используемыми в архитектуре Intel x86, как показано на рис. 1
1 байт 7 0 Ст.байт Мл.байт 2 байта 15 8 7 0 Ст. слово Мл. слово 4 байта 31 16 15 0 Ст. сдвоенное слово Мл. сдвоенное слово 8 байт 63 32 31 0 Согласно с рис.1 целые числа могут быть представлены четырьмя базовыми типами с размерностью в байт (восемь бит), слово (16-ть бит), двойное слово (32 бита), четверное слово (64 бита).
Тип данных GNU C Диапазон значений Размер в x86-32, байт Размер в x86-64, байт Объявление в GNU Assembler unsigned char 0, … ,255 1 1 .byte значение [, … ,значение N] unsigned short 0, … ,65535 2 2 .hword значение [, … ,значение N] .short значение [, … ,значение N] unsigned int 0, … ,4294967295 4 4 .int значение [, … ,значение N] unsigned long 0, … ,4294967295 (18446744073709551615 в х86-64) 4 8 .long значение [, … ,значение N] 4. Порядок следования байтов
Вопрос порядка следования байт возникает при оперировании c данными, имеющий размер от двух байт и более, потому что архитектура x86 использует порядок следования отличный от того, чем мы привыкли пользоваться. В листинге 1, показан пример записи кода ассемблера в мнемоническом представлении программистом (справа) и в машинных кодах (слева) результат работы GNU Assembler AS(1).
. . . 11: 05 67 45 23 01 add $0x1234567,%eax 16: 66 05 ab 89 add $0x89ab,%ax 1a: 04 cd add $0xcd,%al 1c: 80 c4 ef add $0xef,%ah . . .
Как следует из листинга 1, 32-х разрядное целочисленное значение (без учета знака) по смещению 0x11 в машинных кодах содержит, как и полагает её типу, четыре следующих друг за другом байтов от старшего к младшему (big-endian), комбинируемые как сдвоенные слова. Такую же картину можно наблюдать с 16-ти разрядным словом по смещению 0x16, а вот данные по смещению 0x1a и 0x1с, имеющие размерность в один байт, не подвержены таким метаморфозам.
В том же листинге, слева приводится порядок запись данных – следующих друг за другом байтов от младшему к старшему (little-endian), который мы привыкли использовать со школьной скамьи.
Для конвертирования данных из формата «big-endian» в формат «little-endian» и обратно в архитектуре х86 предусмотрена инструкция BSWAP, которую так же можно использовать для повышения быстродействия вычислительных операций десятичной арифметики.
Инструкция BSWAP (от англ. byte swap – байтовая перестановка) изменяет порядок следования байтов в 32-х разрядном операнде следующим образом:
биты с 0 по 7 в нулевом байте меняются местами с битами в четвертом байте (биты 24, … ,31);
биты с 8 по 15 во втором меняются местами с битами в третьем байте (биты 6, … ,21).
В листинге 2 приводится пример использование инструкции BSWAP.. . . imm32_value: .int 0xD4C3B2A1 . . . movl imm32_value,%edx bswapl %edx,%eax . . .
В листинге 3 приводится результат выполнения BSWAP
user@debian:~/gasrunparts-0.2$ src/gasrunparts bswap_intops Result: 0xA1B2C3D4
Для конвертирования 16-ти разрядных данных из формата «big-endian» в формат «little-endian» вместо инструкции BSWAP следует использовать XCHG, как показано в листинге 4.
. . . imm16_value: .hword 0xF2E1 . . . movw imm16_value, %ax xchgb %al, %ah . . .
В листинге 5 приводится результат выполнения XCHG
user@debian:~/gasrunparts-0.2$ src/gasrunparts xchgw_intops Result: 0xE1F2
На рис. 2 показан пример конвертирования 32-х и 16-ти разрядных данных из формата «big-endian» в формат «little-endian» в соответствие с кодом ассемблера, приводимом в листингах 2 и 3.
$0xD4C3B2A1 bswap $0xA1B2C3D4 D416 C316 B216 A116 → A116 B216 C316 D416 $0xF2E1 xchg $0xE1F2 F216 E116 → E116 F216