相关文章推荐
追风的毛衣  ·  Type.IsGenericType 屬性 ...·  1 年前    · 
豪情万千的牛肉面  ·  invalid sender ...·  1 年前    · 
憨厚的松树  ·  JS ...·  2 年前    · 
唠叨的石榴  ·  利用Chrome Dev Tools ...·  2 年前    · 

实现方法:采用二进制的移位

思路:比如两个整数 a = 9 和 b = 19 相乘,将 a 每次除以 2 (右移 1 位,即 a >> 1),b 每次乘以 2 (左移 1 位,即 b << 1),当 a 为奇数的时候,就累加 b 的值到 sum (sum 初始化为 0),即 sum = sum + b;最后 a 的值肯定会有等于 1 的时候,此时把 b 的值累加到 sum 上即为最后 a * b 的值。

以上面的 a = 9,b = 19,为例,首先初始化 sum = 0,判断 a 是否为奇数(让 a 和 1 做逻辑与运算,
a & 1,如果结果不为 0 ,那么 a 为奇数),此时 a = 9 是奇数,则 sum = sum + b = 19;然后 a 除以 ,b 乘以 2 得 a = 4,b = 38,此时 a = 4 为偶数,继续移位,a 除以 2 ,b 乘以 2 得 a = 2,b = 76; 此时 a = 2 为偶数,继续移位,a 除以 2 ,b 乘以 2 得 a = 1,b = 152,此时 a 为奇数,执行 :
sum = sum + b = 19 + 152 = 171
最后 a 除以 2 (右移 1 位)得 0 ,结束运算,最后结果为 171 。

int multiply(int a, int b) {
	int sum = 0;
	while (a) {
		if (a & 1 == 1) { 
			sum = sum + b;
		a = a >> 1;      // a 右移
		b = b << 1;      // b 左移
	return sum;
                                    文章目录只用位运算不用算术运算实现整数的加减乘除运算位运算实现整型算术运算加法相应代码减法相应代码乘法相应代码除法相应代码
只用位运算不用算术运算实现整数的加减乘除运算
位运算实现整型算术运算
给定两个32位整数a和b,可正、可负、可0。不能使用算术运算符,分别实现a和b的加减乘除运算。
如果给定的a和b执行加减乘除的某些结果本来就会导致数据的溢出,那么你实现的函数不必对那些结果负责。
实现结果皆为真实算术运算结果,无溢出。
加法结果拆分成无进位加法(半加法)和进位。
无进位加法:a ^ b
进位:(a & b) << 1
无进位加法与进位结果再重复以上操作(再相加
public class Example {
    public static void main(String[] args) {
        Scanner scan=new Scanner(System.in);// 创建扫描器
        System.out.println("请输入一...
                                    一.说明:
程序开发中常用的乘法运算是通过“*”运算符或者BigDecimal类的multiply()方法实现的。而本实例会介绍在这两种方法之外如何实现乘法实现的效率也非常高。主要是通过位移运算符的左移运算符进行操作。
二.实例:
import java.util.Scanner;
public class Demo4{
	public static void main(String[] 
扫描下方二维码,及时获取更多互联网求职面经、java、python、爬虫、大数据等技术,和海量资料分享:
公众号菜鸟名企梦后台发送“csdn”即可免费领取【csdn】和【百度文库】下载服务;
公众号菜鸟名企梦后台发送“资料”:...
int MySystem::Multi(int x1, int x2)
	//先将其转换为大数,因为INT_MAX 的绝对值不能转换为INT_MIX,转换的结果的为INT_MAX+1,这将导致正溢出,变为负值 INT_MIN
	long long Lx1 = static_cast(x1);
	long long Lx2 = static_cast