По какой причине языки высокого уровня, такие как C # / Java, маскируют операнд счетчика битовых сдвигов?

Это скорее дизайн языка, а не вопрос программирования.

Ниже приводится выдержка изJLS 15.19 Операторы сдвига:

Если повышенный тип левого операндаintтолько пять младших битов правого операнда используются в качестве расстояния сдвига.

Если повышенный тип левого операндаlongтогда только шесть младших битов правого операнда используются в качестве расстояния сдвига.

Такое поведение такжеуказано в C #и хотя я не уверен, что это в официальной спецификации для Javascript (если есть), это также верно, по крайней мере, на основе моего собственного теста.

Следствием этого является следующее:

(1 << 32) == 1

Я понимаю, что эта спецификация, вероятно, «вдохновлена» тем фактом, что базовое оборудование берет только 5 бит для операнда подсчета при сдвиге 32-битных значений (и 6 бит для 64-битной), и я могу понять такое поведение, указанное в Например, уровень JVM, но почему языки высокого уровня, такие как C # и Java, сохраняют это довольно низкое поведение? Разве они не должны обеспечивать более абстрактное представление помимо аппаратной реализации и вести себя более интуитивно? (Еще лучше, если они могут принять отрицательный счет, чтобы означать сдвиг в ДРУГОМ направлении!)

Ответы на вопрос(3)

Ваш ответ на вопрос