【C语言】一分钟带你了解最基础的位运算

本文介绍了一个简单的算法,用于将32位整数转换为其对应的二进制形式,并展示了如何通过位运算实现正负数的互换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

想法

如果我想知道一个整数(32位)它对应的二进制为多少,可以怎么办呢?
我们先来看一段代码(算法)

public static void print(int num){
        for(int i=31;i>=0;i--){
            System.out.print((num&(1<<i))==0?"0":"1");//左移
        }
        System.out.println();
    }

左移

当我输入一个整数时,首先这个整数会有它对应的二进制
例如1= 0 000 0000 0000 0000 0000 0000 0000 0001
1.(1<<i)表示把数字1左移 i 位,这样刚开始就移到了上述 标黄的位置
用1与该位上的数字做与(&)运算,之后移动的位置不断地后移一位
2. 若结果为0,则表明num上该位为0
若结果为1,则表明num上该位为1
遍历完成后,就得到了num对应的二进制啦!

测试

public static void main(String[] args) {
        int num=4;
        print(num);
    }

在这里插入图片描述

右移

其实大体与左移类似,但需注意一点
当每一位均右移后,最高位补什么
这里介绍两种右移
1.>>
有符号右移,意思就是右移后,最高位补符号位
原来是正数,补0
原来是负数,补1
2.>>>
无符号右移,均补0

public static void main(String[] args) {
        int a=Integer.MIN_VALUE;
        print(a);
        print(a>>1);//右移一位,那最高位得需要一个数字来补,>>表示用符号位补
        print(a>>>1);//>>>表示用0来补
    }

在这里插入图片描述

补充

如何通过位运算将正负数互换?
方法:取反加一

public static void main(String[] args) {
        int c=5;
        int d=(~c+1);
        System.out.println(c);
        System.out.println(d);
        
    }

在这里插入图片描述

值得注意的是,
正数最大值为 2^31-1
负数最小值为 -2^31,
当负数取最小值,此时不能得到正的最大值,通过取反加一可知
得到的为其本身

public static void main(String[] args) {
        int c=Integer.MIN_VALUE;
        int d=(~c+1);
        System.out.println(c);
        System.out.println(d);

    }

在这里插入图片描述

其实我们的人生也就像位运算那样,简单而又朴实,或许时常左移,时常右移,徘徊不定,但因为不确定才有了存在的意义!
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值