(图解)JAVA负数位运算

(图解)JAVA负数位运算(随记)

最近遇到个负数位运算的问题,搞了半天才明白,记录一下以便后面忘掉再复习。

在计算机系统中,数值一律用补码来表示(存储)。

在这里插入图片描述

上图纯属个人理解,有错立改

实战一下:
右移: -5>>2
-5源码(负数最高位为1,其他按其绝对值取):
10000000 00000000 00000000 00000101

-5反码(最高位不变,其他位取反):
11111111 11111111 11111111 11111010

-5补码 (给反码进行+1操作):
11111111 11111111 11111111 11111011

对补码进行右移两位(最高位不变,次高两位补1,末尾两位去掉)
11111111 11111111 11111111 11111110(新值补码)

新值的补码:
11111111 11111111 11111111 11111110

新值的反码(对新值进行-1操作):
11111111 11111111 11111111 11111101

新值源码(最高位不变,其他位取反):
10000000 00000000 00000000 00000010

-5右移两位后的新值:-2


左移: -5<<2
-5补码 (给反码进行+1操作):
11111111 11111111 11111111 11111011

对补码进行左移两位(最高位不变,次高两位去掉,末尾补两位0)
11111111 11111111 11111111 11101100

新值补码:
11111111 11111111 11111111 11101100

新值反码(对新值补码尽心-1操作)
11111111 11111111 11111111 11101011

新值(对反码进行最高位不变,其他位取反)
10000000 00000000 00000000 00010100

-5左移两位后的新值:-20


  		位    				: []

        1 bit/boolean		: 1

        1 byte				: 11111111

        1 short/char		: 11111111 11111111

        1 int/float			: 11111111 11111111 11111111 11111111

        1 long/double 		: 11111111 11111111 11111111 11111111
	                      	  11111111 11111111 11111111 11111111
  • 9
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值