(随笔)位运算和移位运算D

计算机二进制(原码 反码 补码)
位运算 移位运算
>>算术右移
<<算术左移
>>>逻辑右移
二进制的基本概念 逢二进一
一个int 4个字节 一个字节等8位
对于有符号的数而言:
1;二进制的最高位是符号位:0表正数1表示负数
2:正数的原码、反码、补码均相同
3:负数的反码=它的原码符号位不变,其他位取反(0-1 1-0)
4:负数的补码=负数的反码+1
5:0的反码补码均为0
6:java中的数均是有符号的
7:在计算机运行过程中均是已补码方式来运算。
1-2:
-2的原码:100........010
-2的反码:111........101
-2的补码:111........110
1的补码加上-2的补码:
111......111—运算结果的补码
111......110—运算结果的反码
100......001—运算结果的原码 为-1

位运算 移位运算:
位运算符: 按位与& 按位或| 按位异或^ 按位取反
按位与&:两个全为1,结果为1
按位或|:两个有一个为1,结果为1
按位异或^: 两位有一个为0 一个为1 结果为1
按位取反~:0-1 1-0;

~2(对2取反):
000.......010  取反为
111.......101  此为结果补码
111.......100  此为结果反码
100.......011  次为结果原码 结果为-3;
2&3:
000.......010
000.......011 进行按位与的运算
000.......010 结果为正数 为2  
2|3:
000.......010
000.......011 进行按位或的运算
000.......011 结果为正数 为3

~-5(-5取反)
100.......101 -5的原码
111.......010 -5的反码
111.......011 -5的补码
000.......100 结果为正数 故为4

-3^3:
100.......011 -3的原码
111.......100 -3的反码
111.......101 -3的补码
000.......011  3的补码
111.......110 结果的补码
111.......101 结果的反码
100.......010 结果的原码   故结果-2

>>算术右移:低位溢出 符号位不变,并用符号位补溢出的高位
<<算术左移:符号位不变 低位补0;
>>>逻辑右移:低位溢出 高位补0

1>>2:
000......001算术右移两位
000......000 为0
-1>>2
100......001 -1的原码
111......110 -1的反码
111......111 -1的补码 进行右移
111......111   结果的补码
111......110   结果的原码
100......001   结果为-1

1<<2
000......001 算术向左移两位4
-1<<2
100......001 算术向左移两位-4(符号位不变)

3>>>2
000......011 向右移动两位 为0


算术左移和算术右移:算术左移符号位不变,而算术右移则符号位不变且换算为补码进行移位运算

逻辑左移和逻辑右移:两者均不必考虑符号位

算术左移和逻辑左移:算术左移会产生溢出,逻辑左移则不会产生溢出

public class Demo2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
     Demo3 d3=new Demo3();
     d3.a();
	}
}
class Demo3
{
	public void a()
	{
		System.out.println("~2="+(~2));
		System.out.println("2&3="+(2&3));
		System.out.println("2|3="+(2|3));
		System.out.println("~-5="+(~5));
		System.out.println("-3^3="+(-3^3));
		System.out.println("1>>2="+(1>>2));
		System.out.println("-1>>2="+(-1>>2));
	    System.out.println("1<<2="+(1<<2));
	    System.out.println("-1<<2="+(-1<<2));
	    System.out.println("3>>>2="+(3>>>2));
	    
	}
}

运行结果为以上。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值