java代碼二進制數取反 二進制取相反數

Java基礎,正數取反,各二進制碼按補碼各位取反;反碼取反,各二進制碼按補碼各位取反。

亂七八糟。按專業角度說,為了解決把二進制整數減法(或負數運算)轉換成加法來算的問題(所以你只聽過累加器,而沒有累減器),就發明了原碼,反碼,補碼。比如一個-2,假設它是八位長度的,原碼就是10000010,最高位1表示這是一個負數。反碼是11111101,就是除符號位以外把原碼各位都取反。補碼就是反碼加1,即11111110。正數2的補碼規定為自身,即00000010。現在把兩個數的補碼相加,11111110+00000010=100000000。前面我們已假設是在八位字長的環境下運算,現在算出了九位,這樣就溢出了,即在八位環境下看,第九位的1是不存在的,結果是00000000,即0。這和我們算2-2的結果是一樣的,這就實現了把減法轉為加法。另外,java還規定了幾個運算,把二進制數作與,或,非,異或,移位等運算,這些都與上面說的三種碼沒有直接關系,不要弄混了

網站建設哪家好,找成都創新互聯公司!專注于網頁設計、網站建設、微信開發、小程序開發、集團企業網站建設等服務項目。為回饋新老客戶創新互聯還提供了青白江免費建站歡迎大家使用!

java里面二進制 八進制 十進制 十六進制怎么互相轉換,有什么規律?

=============(正)十進制轉二進制

除二將余數倒置

eg: 127 /2

商:63 /2 31 /2 15 /2 7 /2 3 /2 1

余數:1 1 1 1 1 1

1111111

=============(負)十進制轉二進制

1、先求負數絕對值的二進制

2、將得到的二進制完全取反+1

eg: -12

1、0000 1100

2、1111 0011 + 1 = 1111 0100

=============(正)十進制轉八進制

除八將余數倒置

eg:54 /8 =66

6

6

=============(負)十進制轉八進制

1、先將十進制轉為二進制

2、再將二進制轉為八進制

eg:-32

1、0010 0000

2、1110 0000

3、三位三位轉

340

=============十進制轉十六進制

1、先將十進制轉為二進制

2、將二進制轉為十六進制

=============二進制轉為十進制

(正)二進制位上的各個數字乘以以2為底數,以自然數為次冪(自然數從0開始)

0110 1011 1*2^0 + 1*2^1 + 0*2^2 + 1*2^3 + 0*2^4 + 1*2^5 + 1*2^6 = 107

(負)

1、首先得到負號

2、將該二進制數取反+1

3、將得到的數轉為十進制加上負號。

=============二進制轉八進制

(1)將二進制三個三個分為一組,分別求出每組二進制的八進制值,將所得到的值依次排開

(2) 1、將二進制轉為十進制

2、將十進制轉為八進制

============二進制轉十六進制

將二進制四個四個分為一組,分別求出每組二進制的十六進制值,將所得到的值依次排開

============八進制轉二進制

(1)將八進制各個位上的數單個轉為二進制,不足三位的補0

eg:127 001 010 111

(2) 1、將八進制轉為十進制

2、再將十進制轉為二進制

============八進制轉十進制

八進制位上的各個數字乘以以8為底數,以自然數為次冪(自然數從0開始)

543 3*8^0 + 4*8^1 + 5*8^2 = 355

============八進制轉十六進制

1、先將八進制轉為二進制

2、再將所得的二進制轉為十六進制

============十六進制轉二進制

將十六進制各個位上的數單個轉為二進制,不足四位的補0

eg:127 0001 0010 0111

============十六進制轉其他進制

都需要先轉為二進制,再轉為其他進制

Java 取反運算符

用以下代碼可以實現你要求的功能:

long lang=64509;

String str1=Long.toBinaryString(lang);//將給定的數轉為二進制字串

String str2=Long.toBinaryString(~lang);//將給定的數取反轉為二進制字串

//將取反后的二進制串取最后的 長度與第一個串長度相等 的子串,這是我們需要的二進制串

String str=str2.substring(str2.length()-str1.length());

//將它轉換為十進制整數

int i=Integer.parseInt(str, 2);

System.out.println(i);

具體理論知識如下所示:

先要理解一些概念:

在2進制中,負數是以它正值的補碼形式表達

原碼:一個整數,按照絕對值大小轉換成的二進制數,稱為原碼。

比如 0000 0000 0000 0000 0000 0000 0000 0101是 5的 原碼。

反碼:將二進制數按位取反,所得的新二進制數稱為原二進制數的反碼。

取反操作指:原為1,得0;原為0,得1。(1變0; 0變1)

比如:將5的二進制表達式的每一位取反,得

1111 1111 1111 1111 1111 1111 1111 1010

稱:1111 1111 1111 1111 1111 1111 1111 1010 是 0000 0000 0000 0000 0000 0000 0000 0101 的反碼。

反碼是相互的,所以也可稱:

1111 1111 1111 1111 1111 1111 1111 1010 和 0000 0000 0000 0000 0000 0000 0000 0101 互為反碼。

補碼:反碼加1稱為補碼。

也就是說,要得到一個數的補碼,先得到反碼,然后將反碼加上1,所得數稱為補碼。

那么,5的補碼為:

1111 1111 1111 1111 1111 1111 1111 1010 + 1 =

1111 1111 1111 1111 1111 1111 1111 1011

所以,-5 在計算機中的二進制表達為:

1111 1111 1111 1111 1111 1111 1111 1011

轉換為十六進制:0xFFFFFFFB。

====================================

明白了上面的就可以理解怎么求 ~i 了

int型儲存32個二進制位,~這個符號是按位取反,就是求i的反碼。

即得到1111 1111 1111 1111 1111 1111 1111 1010

上面這串二進制代表一個負數,將它轉換成int型過程如下:

1111 1111 1111 1111 1111 1111 1111 1010-1 =

1111 1111 1111 1111 1111 1111 1111 1001

再求反:

0000 0000 0000 0000 0000 0000 0000 0110

這個值就是5的按位取反所得到的int整數的絕對值(注意:5按位取反得到的是負數)

所以轉換為int型為:6

即:int型的i=5 取反后的結果為-6

JAVA中對一個數進行取反操作到底是怎么計算的(包括正數和負數),負數的原碼到底如何表示.

先取得數的反碼 然后按位取反 此時得到的是補碼(因為在JAVA中是使用補碼來表示二進制數據的) 再變為原碼就行了 負數的原碼就是1XXXXX 第一位是符號位 后面是數值位

Java二進制反轉

public class BinaryReverse

{

private static String s = null;

public static void main(String[] args)

{

BinaryReverse br = new BinaryReverse();

Scanner sc = new Scanner(System.in);

byte tempbyte;

System.out.println("請輸入要反轉的數字:");

s = sc.nextLine();

tempbyte = Byte.valueOf(s);

tempbyte = br.converse(tempbyte); //開始反轉

System.out.println("翻反轉后十進制: " + tempbyte);

}

public Byte converse(Byte c)

{

String binaryString = null;

StringBuffer needAdd = new StringBuffer();

binaryString = Integer.toBinaryString(Math.abs(c));

System.out.println(binaryString);

if (s.startsWith("-"))

{

if (binaryString.length() 8)

{

needAdd.append("1");

}

}

else

{

if (binaryString.length() 8)

{

needAdd.append("0");

}

}

for (int i = 0; i (7 - binaryString.length()); i++)

{

needAdd.append("0");

}

binaryString = needAdd.append(binaryString).toString();

System.out.println("原數二進制為: " + binaryString);

String reverseString = needAdd.reverse().toString();

System.out.println("反轉后二進制為: " + reverseString);

if (s.startsWith("-"))

{

int i = 0;

for (int j =reverseString.length(),y = 0 ; j 1 ; j--,y++)

{

i = (int) (i + Integer.valueOf(reverseString.charAt(j-1)+"")*Math.pow(2,y));

}

if (reverseString.charAt(0) == '1')

{

i = -i;

}

return (byte)i;

}

return Byte.valueOf(reverseString,2);

}

}

不要忘了加分哦

java中按位取反運算的詳解

按位取反就是每一位都取反,所謂取反就是1變0,0變1

比如樓主說的10

二進制表示就是00000000

00000000

00000000

00001010

取反后就是11111111

11111111

11111111

11110101

這在十進制中就是-11

而他的二進制原碼表示就是-1011

網頁標題:java代碼二進制數取反 二進制取相反數
網站鏈接:http://m.kartarina.com/article14/dodecge.html

成都網站建設公司_創新互聯,為您提供服務器托管網站改版虛擬主機網站策劃自適應網站全網營銷推廣

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都定制網站建設
主站蜘蛛池模板: 亚洲av中文无码乱人伦在线播放| 亚洲成A人片在线观看无码3D| 亚洲熟妇无码八AV在线播放| 国产激情无码一区二区三区| 亚洲VA中文字幕不卡无码| 亚洲中文字幕久久精品无码A| 国产精品va无码免费麻豆| 日韩AV无码中文无码不卡电影| 无码人妻精品一区二区蜜桃AV| 亚洲成AV人在线观看天堂无码| 成人h动漫精品一区二区无码| 亚洲色中文字幕无码AV| 无码的免费不卡毛片视频| 无码国产精品一区二区免费式影视| 免费无码又爽又刺激一高潮| 2024你懂的网站无码内射| 国产成A人亚洲精V品无码| 亚洲AⅤ永久无码精品AA| 中文字幕日产无码| 日韩精品久久无码人妻中文字幕 | 国产强被迫伦姧在线观看无码 | 亚洲AV中文无码字幕色三| 色欲香天天综合网无码| 人妻少妇看A偷人无码精品视频| 无码被窝影院午夜看片爽爽jk | 国产成人无码午夜视频在线观看 | 国产精品久久久久无码av| 国产精品无码无在线观看| 久久久精品无码专区不卡| 内射无码午夜多人| 亚洲AⅤ无码一区二区三区在线 | 亚洲AV无码久久精品色欲| 精品久久久久久无码国产| 亚洲不卡无码av中文字幕| 亚洲精品一级无码中文字幕| 一级片无码中文字幕乱伦| 国产精品免费看久久久无码| 免费无遮挡无码永久在线观看视频| 无码精品一区二区三区| 国产精品无码一区二区三区在 | 亚洲精品无码不卡在线播放|