자바스크립트 Math.imul() 메서드는 두 개의 숫자를 인수로 받아, C 언어 스타일의 32비트 곱셈 결과를 반환합니다.
일반적인 곱셈 연산자(*)와 달리, Math.imul()은 곱셈 결과를 32비트 부동소수점이 아닌 32비트 정수로 처리합니다. 따라서 곱셈 결과가 32비트 정수 범위를 초과하면 오버플로우가 발생하고, 값은 32비트 범위 내에서 순환(wrap-around)되어 반환됩니다. 이러한 특성 덕분에 해시 함수 구현, 암호화 연산, 게임 물리 엔진 등 정밀한 비트 수준 연산이 필요한 코드에서 유용하게 활용됩니다.
문법(Syntax)
Math.imul()의 기본 문법은 다음과 같습니다.
Math.imul(a, b);
인수 a와 b는 곱셈을 수행할 두 숫자입니다. 만약 인수가 정수가 아니라면, 연산 전에 자동으로 32비트 정수로 변환됩니다.
예제(Example)
다음 예제는 Math.imul()을 사용하여 두 숫자를 곱한 결과를 화면에 출력합니다.
<html>
<head>
<title>JavaScript Example</title>
</head>
<body>
<script type="text/javascript">
var result = Math.imul(47, 56);
document.write("Result: " + result);
</script>
</body>
</html>출력(Output)
Result: 2632
오버플로우 동작 확인하기
Math.imul()의 핵심 특징은 큰 숫자를 곱할 때 드러납니다. 아래 예제를 살펴보세요.
console.log(Math.imul(0xffffffff, 5)); // -5 console.log(Math.imul(2 ** 31, 2)); // 0
일반 곱셈이라면 매우 큰 값이 나와야 하지만, Math.imul()은 결과를 32비트 정수로 강제 변환하기 때문에 위와 같이 예상과 다른(그러나 C 언어와 동일한) 결과가 반환됩니다. 이는 의도된 동작이며, 저수준 비트 연산을 자바스크립트에서 재현할 때 반드시 필요한 기능입니다.