0x01 что это за число
Перейти к содержимому

0x01 что это за число

  • автор:

Что означают "0b" и "0x" при назначении двоичного и шестнадцатеричного кодов?

При непосредственном присвоении двоичного значения и шестнадцатеричного значения вы можете сделать это следующим образом (соответственно):

Что означают 0b и 0x ? В частности, 0 на передней панели. Можете ли вы иметь другие значения вместо 0?

Также в качестве еще одного любопытного вопроса, какие еще символы могут идти вместо «b» и «x»? Есть ли один для восьмеричного в качестве примера?

3 ответа

Любые целочисленные литералы, которые вы можете создать, суммированы в стандарте C ++ путем создания грамматики по адресу [ lex.icon ]

Как мы можем вывести из грамматики, существует четыре типа целочисленных литералов:

  • Обычный десятичный, который должен начинаться с ненулевой цифры.
  • Восьмеричное, любое число с ведущим 0 (включая обычный 0).
  • Двоичный, требующий префикс 0b или 0B .
  • Шестнадцатеричный, требующий префикс 0x или 0X .

Ведущие 0 для восьмеричных чисел можно рассматривать как «O» в «Octal». Другие префиксы используют начальный ноль, чтобы отметить начало числа, которое не должно интерпретироваться как десятичное. «B» интуитивно понятно для « b inary», а «X» для «он x adecimal».

0b (или 0B ) обозначает двоичный литерал . C ++ позволил это начиная с C ++ 14. (Это еще не является частью стандарта C, хотя некоторые компиляторы допускают это как расширение.) 0x (или 0X ) для шестнадцатеричного .

0 может использоваться для обозначения восьмеричного литерала . (Интересно, что 0 сам по себе является восьмеричным литералом). Кроме того, вы используете escape-последовательность \ , за которой следуют цифры в восьмеричном формате: это применяется только при определении литералов const char[] с использованием «» или char или литералы с несколькими символами, использующие » . Обозначение ‘\0’ , которое вы часто видите для обозначения NUL при работе со строками, использует это.

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

В мире C ++ есть грохот, чтобы использовать 0o для восьмеричного литерала и, возможно, даже отказаться от поддержки ведущей нулевой версии. Хотя это было бы ужасным переломным моментом.

Они означают, что числовой литерал находится соответственно в двоичной и шестнадцатеричной основе.

Можете ли вы иметь другие значения вместо 0?

Числовой литерал, начинающийся с ненулевой цифры, будет десятичным.

Также в качестве еще одного любопытного вопроса, какие еще символы могут идти вместо «b» и «x»?

Помимо b и x, любая восьмеричная цифра может идти туда, и в этом случае она является самой значимой цифрой восьмеричного литерала.

Почему шестнадцатеричные числа имеют префикс 0x?

почему шестнадцатеричные числа имеют префикс 0x ? Я понимаю использование префикса, но я не понимаю значения why .

4 ответов

краткий сюжет: на 0 сообщает синтаксическому анализатору, что он имеет дело с константой (а не с идентификатором/зарезервированным словом). Что-то еще нужно, чтобы указать базу чисел: x — это произвольный выбор.

долгая история: в 60-х годах преобладающими системами программирования были decimal и восьмеричной — мэйнфреймы имели 12, 24 или 36 бит на байт, что хорошо делится на 3 = log2(8).

язык BCPL используется синтаксис 8 1234 для восьмеричных чисел. Когда Кен Томпсон создал B из BCPL, он использовал 0 префикс вместо этого. Это здорово, потому что

  1. целочисленная константа теперь всегда состоит из одной лексемы,
  2. парсер все еще может сразу сказать, что у него есть константа,
  3. парсер может сразу сказать базе ( 0 одинаково в обеих базах),
  4. это математически вменяемый ( 00005 == 05 ), и
  5. не тужься необходимы специальные символы (как в #123 ).

Когда C был создан из B, возникла необходимость в шестнадцатеричных числах (PDP-11 имел 16-битные слова), и все вышеперечисленные точки были по-прежнему действительны. Поскольку окталы все еще были нужны для других машин, 0x был произвольно выбран ( 00 , вероятно, был исключен как неудобный).

C# является потомком C, поэтому он наследует синтаксис.

примечание: Я не знаю правильного ответа, но ниже-это только мои личные домыслы!

как уже упоминалось, 0 перед числом означает, что оно восьмеричное:

представьте, что вам нужно придумать систему для обозначения шестнадцатеричных чисел, и обратите внимание, что мы работаем в среде стиля C. Как насчет окончания сборки h like? К сожалению, вы не можете — это позволит вам сделать токены, которые являются действительными идентификаторами (например. можно назвать переменную то же самое), что сделало бы некоторые неприятные двусмысленности.

вы не можете привести с персонажем по той же причине:

использование хэша, вероятно, было выброшено, потому что он конфликтует с препроцессором:

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

простой

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

пример :

0x6400 переводится как 6*16^3 + 4*16^2 + 0*16^1 +0*16^0 = 25600. Когда компилятор читает 0x6400 , Он понимает, что число шестнадцатерично с помощью 0x термин. Обычно мы можем понять (6400)16 или (6400)8 или что ..

на Бинарные будет

Надежда каким-то образом помогла.

Добрый день,

предыдущий 0 используется для указания числа в базе 2, 8 или 16.

на мой взгляд, 0x был выбран для обозначения hex, потому что » x » звучит как hex.

Stop 0x00000001

Синий экран смерти 0x00000001 указывает на несоответствие в индексе состояния APC.

Параметры APC_INDEX_MISMATCH:

  1. Адрес системной функции (системного вызова) или подпрограммы;
  2. Значение поля ApcStateIndex текущего потока;
  3. Значение поля CombinedApcDisable текущего потока. Это поле состоит из двух отдельных 16-разрядных полей: (Поток — SpecialApcDisable <16 и Поток – KernelApcDisable);
  4. Тип вызова (0 — системный вызов, 1 — подпрограмма).

Причина появления ошибки 0x01

Наиболее распространенная причина этой STOP-ошибки является несогласованная последовательность вызовов отключения и повторного включения APC у файловой системы или драйвера. Ключевой элемент данных – поле CombinedApcDisable потока. Поле CombinedApcDisable состоит из двух отдельных 16-разрядных полей: SpecialApcDisable и KernelApcDisable. Отрицательная величина каждого поля указывает, что драйвер отключил специальные или обычные APC (соответственно), без дальнейшего включения. Положительное значение указывает, что драйвер включил специальные или обычные APC слишком много раз.

Драйвера, вызывающие код ошибки

  • tcpip.sys;
  • ntoskrnl.exe;
  • ndis.sys;
  • raspppoe.sys;
  • win32k.sys;
  • psi.sys.

Как исправить Stop 0x00000001

1. BSoD 0x00000001 появляется в ОС Windows Server 2008, Windows 7 и Windows 8 при установке сторонних приложений для MTP и WPD устройств. Также при их первой установке.

Данный код ошибки происходит из-за противоречивого состояния драйвера Compositebus.sys. Когда MTP или MPD устройства впервые подключаются к компьютеру перечислитель составной шины обнаруживает их и пытается установить драйвер данного устройства. Во время процесса установки стороннее приложение может выполнить команду сброса USB-устройства, что и вызывает ошибку.

Для устранения ошибки загрузите и установите последние обновления на вашу операционную систему.

2. STOP 0x00000001 появляется в ОС Windows Vista из-за обнаружения ошибке в системном файле Win32k.sys. При этом поле CombinedApcDisable имеет значение 0x0000FFFF.

Обновление операционной системы устранит эту ошибку.

Подробно об ошибке

APC_INDEX_MISMATCH — внутренняя ошибка ядра. Она встречается при завершении системного вызова. Ошибка 0x00000001 возникает, когда у файловой системы или драйвера есть несогласованная последовательность системных вызовов, чтобы запустить или завершить защищаемую или критическую секцию. Например, у каждого вызова KeEnterCriticalRegion должен быть соответствующий вызов KeLeaveCriticalRegion.

Error APC INDEX MISMATCH чаще всего возникает при несовпадении меток KeEnterCricticalRegion и KeLeaveCriticalRegion в файловой системе. KeEnterCricticalRegion временно отключает доставку обычных APC режима ядра, при этом специальные APC режима ядра продолжают доставляться. KeLeaveCriticalRegion включает доставку обычных APC режима ядра, которые были отключены вызовом KeEnterCricticalRegion. Критическая секция может быть запущена рекурсивно, при этом у каждого вызова KeEnterCricticalRegion должен быть соответствующий вызов KeLeaveCriticalRegion.

Добавить комментарий

Ваш адрес email не будет опубликован.