예를 들어 26 * 15
, 곱셈 연산을 할 때 보통 이렇게 계산하는데, 먼저 5
에 6
을 곱합니다. 30
을 얻으려면 0
을 쓰고 3
을 따로 둔 다음 5
에 2
를 곱하세요. >10
에 아래에 적힌 이전 3
을 더하고 5
를 계산한 후 130
을 구한 다음 1을 계산합니다.
를 입력하고 각각 6
과 2
를 곱합니다. 결과 26
를 기록한 다음 130
을 기록합니다. 26
(잘못 정렬됨)은 390
을 나타냅니다. 26 * 15
,在进行乘法操作时,我们一般这样算,先用5
乘以6
得到30
,把0
写下把3
记在一边,再用5
乘以2
得到10
再加上之前的3
写在下面,得到130
;计算完5
再计算1
分别乘以6
和2
把得到的结果26
记在下面,然后把130
和26
相加(有错位)得到390
。
看完了十进制的相乘,再来看下二进制的相乘,基本原理是一样的,也是以十字相乘法为例,计算 5 * 7
。
5
的二进制为101
,7
的二进制为111
,来看下二进制的十字相乘法。
可以看到二进制为101
和二进制111
用传统的方式来计算,得到的结果为100011
,而二进制100011
对应的十进制为35
。
所以说,在计算的过程中,十进制和二进制的计算方式是一样的,当然这里就不进行举例和证明了。
既然计算过程有了,那么怎么样用代码来实现呢?
我们再来看下上图中二进制的计算过程:
先用二进制111
的最后一位1
乘上 101
得到 101
。
再用二进制111
的倒数第2位1
乘上 101
得到 101
。
再用二进制111
的倒数第3位1
乘上 101
得到 101
。
得到的三个101
进行二进制相加,得到 100011
。
注意,第2
步和第3
步得到的结果101
都往前挪了一位,相当于1010
和10100
,也就是最后相加的计算为:10100 + 1010 + 101 = 100011
。
再来看得到最终相加的计算10100 + 1010 + 101 = 100011
,也就是只要我们找到如何把数据转换为几位数的相加就可以了,因为之前已经实现了如何用位运算实现加法操作。
这三个数101
、1010
、10100
的数量刚好与二进制111
的个数相同,也就是二进制(上图下面那个乘数111
)有几位就会产生几个数相加,如果是与11111
相乘就会产生5
个数相加。
再来看数据之前的关系:
第一次相乘结果:101 = 101 + 0
第二次相乘结果:1111 = 101
第三次相乘结果:100011 = 101
从这里我们可以看到,每计算一次,101
只需要向左移一次再加上上一次的计算结果就可以了。
那么,怎么知道要左移多少次呢?从这里例子中看,111
每次计算后,向右移动一次,101
也跟着向左移动一次,直到111
5 * 7
을 계산하기 위해 교차 곱셈 방법도 살펴보겠습니다.
5
의 이진법은 101
이고, 7
의 이진법은 111
임을 살펴보겠습니다. 이진 교차 곱셈 법칙.
You 이진수 101
및 이진수 111
가 기존 방식으로 계산되어 결과는 100011
인 반면 이진수 100011
를 볼 수 있습니다. > 해당 십진수 표기법은 35
입니다.
그래서 계산 과정에서 십진법과 이진법의 계산 방법은 동일합니다. 물론 여기서는 예와 증명을 제시하지 않습니다.
1111을 사용합니다. /code>
101
을 곱하여 101
을 얻습니다. 🎜111
의 마지막 두 번째 숫자 1
에 101
를 곱하여 101을 얻습니다. 코드코드>. 🎜
111
의 마지막 세 번째 숫자 1
에 101
를 곱하여 101을 얻습니다. 코드코드>. 🎜
101
3개를 바이너리로 더해 100011
를 얻습니다. 🎜2
및 3
단계에서 얻은 결과 101
가 비트 앞으로 이동되었습니다. 1010
및 10100
으로, 즉 최종 덧셈 계산은 10100 + 1010 + 101 = 100011
입니다. 🎜🎜최종 덧셈 10100 + 1010 + 101 = 100011
의 계산을 살펴보겠습니다. 즉, 데이터를 여러 자리의 덧셈으로 변환하는 방법만 찾는다면 충분합니다. 비트 연산을 이용한 덧셈 연산을 구현하는 방법 이전에 구현되었기 때문입니다. 🎜🎜이 세 숫자 101
, 1010
, 10100
의 숫자는 이진수 111
의 숫자와 정확히 같습니다. 즉, 이진수 개수(위 그림 하단의 승수 111
)에 11111을 곱하면 여러 개의 숫자가 생성됩니다. code>, <code> 5
숫자가 더해집니다. 🎜🎜데이터 이전의 관계를 살펴보겠습니다. 🎜101 = 101 + 0
🎜1111 = 101 🎜
100011 = 101 🎜
101
왼쪽으로만 이동하면 된다는 것을 알 수 있습니다. 한 번 클릭하고 마지막 계산 결과를 추가합니다. 🎜🎜그렇다면 왼쪽으로 몇 번이나 이동하는지 어떻게 알 수 있나요? 여기 예에서 111
는 각 계산 후 오른쪽으로 한 번씩 이동하고, 111
만 남을 때까지 101
도 왼쪽으로 한 번씩 이동합니다. 마지막 숫자는 계산을 중지하세요. 🎜🎜코드 구현🎜🎜위 아이디어에 따라 코드를 구현해 보겠습니다.🎜// 用位运算实现加法 public static int add(int a, int b) { int sum = 0; while (b != 0) { sum = a ^ b; b = (a & b) << 1; a = sum; } return sum; } // 用位运算实现减法 public static int multi(int a, int b) { int res = 0; while (b != 0) { if ((b & 1) != 0) { res = add(res, a); } a <<= 1; b >>>= 1; } return res; }
위 내용은 비트 연산을 사용하여 Java에서 곱셈을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!