Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

자바스크립트 Math.imul() 함수 – 32비트 정수 곱셈 완벽 이해하기

자바스크립트 Math.imul() 메서드는 두 개의 숫자를 인수로 받아, C 언어 스타일의 32비트 곱셈 결과를 반환합니다.

일반적인 곱셈 연산자(*)와 달리, Math.imul()은 곱셈 결과를 32비트 부동소수점이 아닌 32비트 정수로 처리합니다. 따라서 곱셈 결과가 32비트 정수 범위를 초과하면 오버플로우가 발생하고, 값은 32비트 범위 내에서 순환(wrap-around)되어 반환됩니다. 이러한 특성 덕분에 해시 함수 구현, 암호화 연산, 게임 물리 엔진 등 정밀한 비트 수준 연산이 필요한 코드에서 유용하게 활용됩니다.

문법(Syntax)

Math.imul()의 기본 문법은 다음과 같습니다.

Math.imul(a, b);

인수 ab는 곱셈을 수행할 두 숫자입니다. 만약 인수가 정수가 아니라면, 연산 전에 자동으로 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 언어와 동일한) 결과가 반환됩니다. 이는 의도된 동작이며, 저수준 비트 연산을 자바스크립트에서 재현할 때 반드시 필요한 기능입니다.