【算法04】位运算

1、将所给数转化为二进制

public class weiyunsuan {
    public static void main(String[] args) {
        //获取最大的正数
        zhuanhua(Integer.MAX_VALUE);
    }
    public static void zhuanhua(int a){
        //从能移动的最高位开始递减,相与后得出的结果就是从数据的最高位递减,这样便于将数据的二进制直接输出
        //1可以不左移,相与得到的结果就是数据a的最后一位的元素,即i == 0;
        for(int i = 31;i >= 0;i--){
            //通过将1不断左移,与传入的数据相与得出数据每个位置上的元素是0还是1
            System.out.print((a & (1 << i)) == 0 ? "0" : "1");
        }
        System.out.println();
    }
}

2、>>与>>>的区别

①相同点:

对于正数来说,二者没有区别,都是向右移动某些位,符号位用0填补。

②不同点:

对于负数而言:

>>表示“带符号右移”,即向右移动后,符号位用1填补

>>>表示“不带符号右移”,即向右移动后,符号位用0填补

3、正数与负数的相互转化

int a = Integer.MAX_VALUE;
int b = -a;
int c = (~a + 1);
zhuanhua(a);
zhuanhua(b);
zhuanhua(c);
//由结果知:b与c的结果一致

令a为正数(负数),b、c均为a的相反数

b = -a;

c = (~a  + 1);

结果是:b == c

4、最小负数的相反数还是它本身

int a = Integer.MIN_VALUE;
int b = -a;
int c = (~a + 1);
zhuanhua(a);
zhuanhua(b);
zhuanhua(c);

①最小的负数的相反数还是它本身的原因:最小的负数整体取反加一之后还是它本身

②任何一个正数都有它对应的相反数,但是负数只有除了最小的数外才有一一对应的相反数,

原因在于二进制的范围是:(正数比负数少一个)

 5、0的相反数还是0

 0取反加一后,溢出了一位,溢出的当不存在,得出的结果还是0

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值