Оскільки багато існуючих відповідей вказують на деталі впровадження Java та вихід налагодження, давайте подивимось на математику, що стоїть за двійковим множенням, щоб дійсно відповісти на те, чому.
Коментар @kasperd йде в правильному напрямку. Припустимо, ви не множите безпосередньо на число, а на прості множники цього числа. Тоді багато чисел матимуть 2 як основний фактор. У двійковому це дорівнює зсуву вліво. За комутативністю ми можемо помножити на прості коефіцієнти 2 перших. Це означає, що ми просто робимо ліву зміну.
Переглядаючи правила двійкового множення, єдиний випадок, коли 1 призведе до певної позиції цифри, коли обидва значення операнда є одиницями.
Таким чином, ефект лівого зсуву полягає в тому, що нижча бітова позиція 1 при подальшому множенні результату збільшується.
Оскільки ціле число містить лише біти найнижчого порядку, всі вони будуть встановлені на 0, коли основний коефіцієнт 2 виставляється досить часто в результаті.
Зауважимо, що представлення комплементу двох не представляє інтерес для цього аналізу, оскільки знак результату множення можна обчислити незалежно від отриманого числа. Це означає, що якщо значення переповнюється і стає негативним, біти нижнього порядку представляються як 1, але під час множення вони знову трактуються як 0.