Search
Write a publication
Pull to refresh

Comments 8

Как эффективно отделить четные биты от нечетных
X=B0 B1 B2 B3 B4 B5...B63 => Y=B0 B2 B4… B62, Z=B1 B3 B5...B63
и эффективно расставить биты в обратном порядке X=B0 B1… B63 => Y=B63...B1 B0 ?

Здесь будет интересно разобрать принцип представления в Go отрицательных чисел

Как здорово, что это только в Go.

Кто сказал?
В любом компилируемом языке на пк отрицательные целые - в дополнительном коде представляются. Подозреваю, что можно найти доступную архитектуру, где отрицательные числа не такие, но таких я просто не помню.
Это представление процессора, а не языка.

"Чё ты такой серьезный".jpg

Похоже, все эти "хитрости" - то, что штатно использовалось в си.

VHDL смотрит на эти "хитрости" и улыбается.

Таки он смотрит на них с другой стороны, ему не только улыбаться можно :-)

Рассмотрим пример: 0b1001 + 0b01001. Здесь 0b1 + 0b1 == 0b10, и это компонента 2*(a&b) при том, что 0b1000 + 0b01000 == 0b11000 выражается через a^b

Написал автору оригинала, что тут ошибка. 0b1000 + 0b01000 == 0b11000 на самом деле равно 0b10_000 и в примере должно быть 0b01_000 + 0b10_000

И ещё вот это

0xdfff-0xd800=0x7fff

Должно быть 0xdfff-0xd800=0x7ff а не 0x7fff

Думал не писать коммент, но в переводе есть одна неточность

В Go отсутствует операция сдвига вправо

Операция сдвига вправо в Go есть, а вот функции обратной bits.RotateLeft8 нет, то есть нет операции ротации вправо.

сдвиг влево на 3 бита – это то же самое, что сдвиг вправо на 5 бит

Вот это уже совершенно не верно в контексте сдвигов, но верно в контексте ротации битов в числе.

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

Sign up to leave a comment.