JAVA中位運算實現乘法

2021-08-14 17:53:40 字數 1249 閱讀 3605

位運算子主要包括下表中所列的幾種:

運算子含義

用法運算分類

~按位取反

~op1

按位運算

&按位與

op1&op2

|按位或

op1|op2

^按位異或

op1^op2

<<

左移op1《移位運算子

>>

右移op1>>op2

>>>

無符號右移

op1>>>op2

使用位運算實現乘法,利用的是左移符號。

舉例:不使用「*」,計算21*16的值。

分析:21轉換為二進位制為10101,16轉換為二進位制為10000.

10000等價於左移四位,所以21*16的值等價於將21的二進位制的值左移四位,使用**實現:

/**

* 使用移位運算子計算21*16

*/int a = 21; //轉換為二進位制為10101

int b = 16; //轉換為二進位制為10000

system.out.println("a="+a+",b="+b);

int c = a*b; //將a*b的值賦給c,用於比較移位運算子的結果準確性

int d = a<<4; //將a直接左移四位

system.out.println(c);

system.out.println(d);

計算結果均為336

延伸:計算21*21的值,同樣不使用「*」,而是用移位運算子計算。

思考:21的二進位制表示為10101,這次的乘數為21,不能簡單的使用左移運算子。

21*21,轉換為二進位制是10101*10101,由於二進位制運算的特殊性,可以拆分為10101*10000、10101*00100和10101*00001三個式子的和,如此看來,即將10101分別左移4位,左移2位和左移0位,然後求和。

利用**實現:

/**

* 使用移位運算子,計算21*21的值

*/int num1 =21; //21的二進位制值為10101

int num2 =21;

int num3 = 21*21; //宣告num3作對照

int num4 = (num1<<4)+(num1<<2)+num1;

system.out.println(num3);

system.out.println(num4);

計算結果均為441

位運算 90 64位整數乘法

求 a 乘 b 對 p 取模的值。輸入格式 第一行輸入整數 a,第二行輸入整數 b,第三行輸入整數 p。輸出格式 輸出乙個整數,表示a b mod p的值。資料範圍 1 a,b,p 1e18 輸入樣例 3 45輸出樣例 2差點粘個大數板子2333 思路 1.b b1 b2 b3 a b p a b1...

位運算 64位整數乘法

64位整數乘法題目鏈結 題目大意 求 a aa 乘 b bb 對 p pp 取模的值,其中 1 leq aa a,bb b,pp p leq 10 1810 1018 輸入格式 第一行輸入整數a aa,第二行輸入整數b bb,第三行輸入整數ppp。輸出格式 輸出乙個整數,表示 a b a ba bm...

Java 中的位運算

移位運算子 包括 右移 左移 無符號右移 例子 5 3 1 1111 1111 1111 1111 1111 1111 1111 1011 1111 1111 1111 1111 1111 1111 1111 1111 其結果與 math.floor double 5 2 2 2 完全相同。5 3 ...