java位操作_JAVA的位操作符

最近几种进制,加上各种位操作符,发现都比较模糊,不能完全掌握,这里就再熟悉熟悉。

1.按位操作符 :

按位操作符是用来操作基本数据类型中的单个bit,即二进制位,会对两个参数执行布尔代数运算,获得结果。

与(&)运算:

1&1 = 1, 1&0 = 0, 0&0  = 0; 这里相当于做乘法,也可以认为男女双方都有感觉才有结果。

或(|)运算:

1 | 1 = 1, 1|0=1, 0|0 = 0;这表示条件宽松,只有有一方有感觉,都可以有结果。

异或(^)运算

1 ^ 1 = 0; 1^0 = 1;0 ^ 0 = 0; 这表示两个冤家,非要不同,经过磨难才能有结果。

上面都是二元操作符,而 非(~) ,是一元操作符,也叫取反操作。连符号位 也会取反哦,

注意:上面的二元操作符可以和 “=”连用,比如:&=,|=。 一元非不行

2.移位操作符

这也是操作二进制的。

>> <<:>

>> >:  无符号右移,无论正负数,前面(高位)都补0

注意:所有的位移运算都会先转换成 int 到二进制,再进行操作。先看移动过程

public static void main(String[] args) {

int a = 2;

// 原始数据

System.out.println(Integer.toBinaryString(a));

//00000000000000000000000000000010 前面的0,会被省略

System.out.println(Integer.toBinaryString(-a));

//11111111111111111111111111111110

// 带符号的 右移动,这里用负数,方便观察

System.out.println(Integer.toBinaryString(-a>>1));

//原始:11111111111111111111111111111110

//现在:11111111111111111111111111111111 比较,右移1位,前面自动加符号1

System.out.println(Integer.toBinaryString(-a<<1));

//原始:11111111111111111111111111111110

//现在:11111111111111111111111111111100 比较,左移1位,后面默认加0

// 看无符号 移动,也就是不管前面符号位

System.out.println(Integer.toBinaryString(-a>>>1));

//原始:11111111111111111111111111111110

//现在:1111111111111111111111111111111 比较,发现少了一位,因为无符号,默认前面补0

// 这个无符号 ,不能左移动 - -!

//System.out.println(Integer.toBinaryString(-a<<<1));

}

下面看看 特殊的移动。

byte b = 127;

System.out.println("原始:"+Integer.toBinaryString(b));

//原始:1111111

//现在:11111110 这里移动了就是254了,已经默认转换成int 了。

System.out.println(b<<1);

// 这里如果强行转byte,会得到 -2.

// int 和 byte 的转换,超过127,128 就会 成 -128,129 就成 -127.这样循环。

int c =1;

// 因为int 只有32位,到31位的时候,就成负数了。

// 如果继续移动,就开始循环了。

for(int i =1;i<34;i++){

System.out.println(i+" : "+Integer.toBinaryString(c<

System.out.println(c<

}

}

这里就是一些简单的位移运算 方式了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值