Java中-13取反是多少_java 原碼、反碼、補碼計算 以及 取反(~)運算

(1)n=37 ,二進制數就是 100101

因為在Java中,所有數據的表示方式都是以補碼形式來表示,如果沒有特別的說明,Java 中的數據類型默認為int,int數據類型的長度為8位,就是32字節,32bit的意思,因此,n=100101的原碼=補碼(因為是正數,所以原=補=反)運算過程就是:

原碼:00000000 00000000 00000000 00100101 =37

~n(對n的原碼) 取反運算得:  11111111 11111111 11111111 11011010        很明顯,最高位是1,意思是原碼為負數,負數的補碼是其絕對值的原碼取反,末尾再加1,因此,我們可將這個二進制數的補碼進行還原:

首先,末尾減1得反碼:11111111 11111111 11111111 11011001

其次,將各位取反得原碼:00000000 00000000 00000000 00100110   這個就是~n的絕對值形式,|~n|=38   ,

所以,~n=-38,這個就是Java虛擬機的運算結果

(2)n= - 4, 取反 (~-4)

-4補碼:10000000 00000000 00000000 00000100

-4反碼:10000000 00000000 00000000 00000011

-4原碼:11111111 11111111 11111111 11111100

對原碼取反:00000000 00000000 00000000 00000011  (3)

因為是正數,所以補碼等於原碼等於反碼= 3,所以~-4 = 3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值