Java中關於十進位制數取反問題解決

JEE-逆水百川發表於2015-08-05

首先再此申明:正數在計算機中是用二進位制表示的,負數在計算機中是用補碼錶示的.

十進位制數取反,舉例說明:

比如: 1取反(~1)為-2,-1(~-1)取反為0,首先這問題關係到原碼,反碼,補碼的知識,這裡就不做詳細說明.

(1)以正整數說明:現在對1以一個位元組(1位元組為8位)為例:1=0000 0001,~1表示按位取反=1111 1110因為計算機中儲存的是補碼,解釋一下:這個補碼的值減1,變成反碼 1111 1101,首位為符號位,不變,其餘取反,轉為原碼:1000 0010 = -2;即1取反為-2.


(2)以負整數說明:因為計算機中儲存的是補碼(二進位制),所以我們先求出原碼,轉化為反碼,再加1 為補碼(注意符號位不變),在對補碼取反(符號位根據取反變化)轉化為10進位制即為我們所求結果!現在對-1以一個位元組(1位元組為8位)為例:-1=10000001,反碼為:11111110,補碼為:11111111,在對補碼取反為:00000000,所以轉化為10進製為0 ,即-1取反為0.

大家可以用eclipse或者其他開發工具驗證:如:

int x = 1 ,y = -1, z = 3, k = -3;

System.out.println(~x);//-2
System.out.println(~y);//0
System.out.println(~z);//-4
System.out.println(~k);//2

相關文章