--- title: Math.imul() slug: Web/JavaScript/Reference/Global_Objects/Math/imul tags: - Experimental - Expérimental(2) - JavaScript - Math - Method - Reference - Référence(2) translation_of: Web/JavaScript/Reference/Global_Objects/Math/imul ---
Метод Math.imul()
возвращает результат перемножения в стиле C двух 32-битных чисел.
Math.imul(a, b)
a
b
Метод Math.imul()
позволяет выполнять быстрое перемножение двух 32-битных чисел с семантикой C. Эта возможность полезна для таких проектов, как Emscripten. Поскольку метод imul()
является статическим методом объекта Math
, вы всегда должны использовать его как Math.imul()
, а не пытаться вызывать метод на созданном экземпляре объекта Math
(поскольку объект Math
не является конструктором).
Math.imul()
Math.imul(2, 4); // 8 Math.imul(-1, 8); // -8 Math.imul(-2, -2); // 4 Math.imul(0xffffffff, 5); // -5 Math.imul(0xfffffffe, 5); // -10
Этот метод может эмулироваться следующим способом:
Math.imul = Math.imul || function(a, b) { var ah = (a >>> 16) & 0xffff; var al = a & 0xffff; var bh = (b >>> 16) & 0xffff; var bl = b & 0xffff; // сдвиг на 0 бит закрепляет знак в старшей части числа // окончательный |0 преобразует беззнаковое значение обратно в знаковое значение return ((al * bl) + (((ah * bl + al * bh) << 16) >>> 0)|0); };
Спецификация | Статус | Комментарии |
---|---|---|
{{SpecName('ES6', '#sec-math.imul', 'Math.imul')}} | {{Spec2('ES6')}} | Изначальное определение. |
Возможность | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Базовая поддержка | {{CompatChrome("28")}} | {{CompatGeckoDesktop("20")}} | {{CompatUnknown}} | {{CompatOpera("16")}} | {{CompatSafari("7")}} |
Возможность | Android | Chrome для Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Базовая поддержка | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatGeckoMobile("20")}} | {{CompatUnknown}} | {{CompatUnknown}} | iOS 7 |