位运算 加法详解

位运算操作基础


符号描述运算规则
&位与运算两个位都为1时,结果才为1
|位或运算两个位都为0时,结果才为0
^异或运算两个位相同为0,相异为1
~取反运算0变1,1变0
<<左移运算各二进位全部左移若干位,高位丢弃,低位补0
>>右移运算各二进位全部右移若干位,对无符号数,高位补0,有符号数,各编译器处理方法不一样,有的补符号位(算术右移),有的补0(逻辑右移)

注意:位运算符优先级很低,所以在运用的时候最好加上括号


常用位操作小技巧

判断奇偶
  奇偶数只要根据末位是0还是1就可判断,因此可用if (x & 1)来判断x的奇偶性,条件判断为真即为奇数,反之为偶数。

		int x = 0;
        if ((x & 1) == 1) {
            System.out.println("x为奇数");
        } else {
            System.out.println("x为偶数");
        }

位运算加法

  不考虑进位时

// 有这四种情况
1 + 1 = 0;
1 + 0 = 1;
0 + 1 = 1;
0 + 0 = 0;

// 可以用异或运算(^)来代替
1 ^ 1 = 0;
1 ^ 0 = 1;
0 ^ 1 = 1;
0 ^ 0 = 0;

  判断什么时候会进位

0 + 0 = 00;//不需要
1 + 0 = 00;//不需要
0 + 1 = 00;//不需要
1 + 1 = 10;//需要

//可以用 位与运算(&) 代替判断
0 & 0 = 0;//不进位
1 & 0 = 0;//不进位
0 & 1 = 0;//不进位
1 & 1 = 1;//需要进位

//使用 左移运算(<<) 进行进位
1 << 1 = 10;

  遇到有进位时

// 正常加
10 + 11 = 101

// 用 异或运算(^) 来计算加法
10 ^ 11 = 01; 

// 用 位与运算(&) 来判断是否需要进位 并用 左移运算(<<) 进位
10 & 11 = 10;//结果大于0 需要进位
10 << 1 = 100;

//将 异或运算(^) 计算出来的值 加上 位与运算(&) 并进位 计算出来的值
100 + 01 = 101;//普通加法
100 ^ 01 = 101;//用 ^ 代替

最终代码

    private static int add(int a, int b) {
        if (b != 0) {//直到无法进位
            int sum = a ^ b;
            b = (a & b) << 1;
            a = sum;
            return add(a, b);
        } else {
            return a;
        }

位运算乘法
  乘法就是n个数相加,我们只需要多次计算加法即可

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int a = scanner.nextInt();
        int b = scanner.nextInt();
        int multiplication = 0;
        if ((b & 1) == 1) {
            multiplication = a;
        }
        for (int i = 0; i < b / 2; i++) {
            multiplication += add(a, a);
        }
        System.out.println(multiplication);
    }
 		private static int add(int a, int b) {
        if (b != 0) {//直到无法进位
            int sum = a ^ b;
            b = (a & b) << 1;
            a = sum;
            return add(a, b);
        } else {
            return a;
        }
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
矩阵运算是一种广泛应用于数值计算和科学计算的运算方式,能够高效、准确地处理大量数据。Matlab作为一种专业的数学软件,提供了丰富的矩阵运算功能,下面将对常见的矩阵运算进行详细解释。 1. 矩阵乘法 矩阵乘法是矩阵运算中最基础的运算,它的实现方法是将一个矩阵的每一行与另一个矩阵的每一列进行内积运算,并将结果相加。在Matlab中,可以使用“*”运算符来进行矩阵乘法。 例如,对于两个矩阵A和B,它们的矩阵乘积C可以表示为: C = A * B 需要注意的是,矩阵乘法要求左边矩阵的列数与右边矩阵的行数相等,否则无法进行乘法运算。 2. 矩阵加法和减法 矩阵加法和减法是通过对应元素的加减来实现的。在Matlab中,可以使用“+”和“-”运算符来进行矩阵加法和减法。 例如,对于两个矩阵A和B,它们的矩阵加法和减法分别表示为: C = A + B D = A - B 需要注意的是,两个矩阵进行加减法的前提条件是它们的维度相同。 3. 矩阵转置 矩阵转置是将矩阵的行列互换的操作,可以使用“'”运算符来进行矩阵转置。 例如,对于一个矩阵A,它的转置矩阵表示为: B = A' 需要注意的是,矩阵转置不改变矩阵的元素值,只是改变了它们的排列顺序。 4. 矩阵求逆 矩阵求逆是指对于一个可逆矩阵,求出其逆矩阵的过程。在Matlab中,可以使用“inv”函数来求矩阵的逆。 例如,对于一个可逆矩阵A,它的逆矩阵表示为: B = inv(A) 需要注意的是,非可逆矩阵没有逆矩阵。 5. 矩阵求行列式 矩阵行列式是一个数值,它可以用来判断矩阵是否可逆。在Matlab中,可以使用“det”函数来求矩阵的行列式。 例如,对于一个矩阵A,它的行列式表示为: d = det(A) 需要注意的是,行列式为0的矩阵是不可逆的。 6. 矩阵求特征值和特征向量 矩阵的特征值和特征向量是矩阵在线性变换下的重要性质,在许多数学问题中都有广泛的应用。在Matlab中,可以使用“eig”函数来求矩阵的特征值和特征向量。 例如,对于一个矩阵A,它的特征值和特征向量分别表示为: [V,D] = eig(A) 其中,V为特征向量矩阵,D为特征值矩阵。 以上是Matlab中常见的矩阵运算,它们在数值计算、科学计算、数据分析等领域中都有广泛的应用。需要注意的是,在进行矩阵运算时,要特别关注矩阵的维度和性质,以确保运算的正确性和有效性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值