DCPU-16 Побитовый сдвиг

Я пытаюсь изучить DCPU.

;Set b to 1
SET B,1 ;00001 (1)
SHL B,1 ;00010 (2)
SHL B,1 ;00100 (4)
SHL B,1 ;01000 (8)
SHL B,1 ;10000 (16)

Все, что я делаю, это переключаюсь на левый, так что не должен ли он просто удваиваться каждый сдвиг. В моем коде вы можете видеть, что у меня есть последняя смена, превращающая реестр B в 16, но когда запустил B, получается 10, почему это так.


person Bevilacqua    schedule 25.07.2012    source источник
comment
Вы уверены, что случайно не отображаете значение реестра в шестнадцатеричном формате? :)   -  person BlueRaja - Danny Pflughoeft    schedule 25.07.2012
comment
Хотел бы я ответить, что весь код находится в исходном посте, а в окне регистрации указано 0x0010, поэтому я почти уверен, что это шестнадцатеричный код, но я не уверен, что это можно просмотреть другим способом.   -  person Bevilacqua    schedule 25.07.2012


Ответы (1)


окно реестра говорит 0x0010...

Вы получаете правильный ответ, вы просто просматриваете его в шестнадцатеричном формате.

Числа, начинающиеся с 0x, являются стандартным способом обозначения шестнадцатеричного числа; поэтому число 0x0010 на самом деле является числом 1016 ("один ноль по основанию шестнадцать"), что в десятичном виде равно шестнадцати.

person BlueRaja - Danny Pflughoeft    schedule 25.07.2012
comment
но тогда не должно быть 0x0016 - person Bevilacqua; 26.07.2012
comment
@Bevilacqua - Нет, 0x16 будет 0d22 в десятичной системе счисления. 0x10 = 0d16 = 0o20 (восьмеричный) = 0b10000 (двоичный); они все одинаковые. - person Kevin Vermeer; 26.07.2012