JAVA中位运算实现乘法

位运算符主要包括下表中所列的几种:
运算符含义用法运算分类
~按位取反~op1按位运算
&按位与op1&op2
|按位或op1|op2
^按位异或op1^op2
<<左移op1<<op2移位运算符
>>右移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


  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值