欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

java代碼二進(jìn)制數(shù)取反 二進(jìn)制取相反數(shù)

Java基礎(chǔ),正數(shù)取反,各二進(jìn)制碼按補(bǔ)碼各位取反;反碼取反,各二進(jìn)制碼按補(bǔ)碼各位取反。

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

網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了青白江免費(fèi)建站歡迎大家使用!

java里面二進(jìn)制 八進(jìn)制 十進(jìn)制 十六進(jìn)制怎么互相轉(zhuǎn)換,有什么規(guī)律?

=============(正)十進(jìn)制轉(zhuǎn)二進(jìn)制

除二將余數(shù)倒置

eg: 127 /2

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

余數(shù):1 1 1 1 1 1

1111111

=============(負(fù))十進(jìn)制轉(zhuǎn)二進(jìn)制

1、先求負(fù)數(shù)絕對(duì)值的二進(jìn)制

2、將得到的二進(jìn)制完全取反+1

eg: -12

1、0000 1100

2、1111 0011 + 1 = 1111 0100

=============(正)十進(jìn)制轉(zhuǎn)八進(jìn)制

除八將余數(shù)倒置

eg:54 /8 =66

6

6

=============(負(fù))十進(jìn)制轉(zhuǎn)八進(jìn)制

1、先將十進(jìn)制轉(zhuǎn)為二進(jìn)制

2、再將二進(jìn)制轉(zhuǎn)為八進(jìn)制

eg:-32

1、0010 0000

2、1110 0000

3、三位三位轉(zhuǎn)

340

=============十進(jìn)制轉(zhuǎn)十六進(jìn)制

1、先將十進(jìn)制轉(zhuǎn)為二進(jìn)制

2、將二進(jìn)制轉(zhuǎn)為十六進(jìn)制

=============二進(jìn)制轉(zhuǎn)為十進(jìn)制

(正)二進(jìn)制位上的各個(gè)數(shù)字乘以以2為底數(shù),以自然數(shù)為次冪(自然數(shù)從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

(負(fù))

1、首先得到負(fù)號(hào)

2、將該二進(jìn)制數(shù)取反+1

3、將得到的數(shù)轉(zhuǎn)為十進(jìn)制加上負(fù)號(hào)。

=============二進(jìn)制轉(zhuǎn)八進(jìn)制

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

(2) 1、將二進(jìn)制轉(zhuǎn)為十進(jìn)制

2、將十進(jìn)制轉(zhuǎn)為八進(jìn)制

============二進(jìn)制轉(zhuǎn)十六進(jìn)制

將二進(jìn)制四個(gè)四個(gè)分為一組,分別求出每組二進(jìn)制的十六進(jìn)制值,將所得到的值依次排開

============八進(jìn)制轉(zhuǎn)二進(jìn)制

(1)將八進(jìn)制各個(gè)位上的數(shù)單個(gè)轉(zhuǎn)為二進(jìn)制,不足三位的補(bǔ)0

eg:127 001 010 111

(2) 1、將八進(jìn)制轉(zhuǎn)為十進(jìn)制

2、再將十進(jìn)制轉(zhuǎn)為二進(jìn)制

============八進(jìn)制轉(zhuǎn)十進(jìn)制

八進(jìn)制位上的各個(gè)數(shù)字乘以以8為底數(shù),以自然數(shù)為次冪(自然數(shù)從0開始)

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

============八進(jìn)制轉(zhuǎn)十六進(jìn)制

1、先將八進(jìn)制轉(zhuǎn)為二進(jìn)制

2、再將所得的二進(jìn)制轉(zhuǎn)為十六進(jìn)制

============十六進(jìn)制轉(zhuǎn)二進(jìn)制

將十六進(jìn)制各個(gè)位上的數(shù)單個(gè)轉(zhuǎn)為二進(jìn)制,不足四位的補(bǔ)0

eg:127 0001 0010 0111

============十六進(jìn)制轉(zhuǎn)其他進(jìn)制

都需要先轉(zhuǎn)為二進(jìn)制,再轉(zhuǎn)為其他進(jìn)制

Java 取反運(yùn)算符

用以下代碼可以實(shí)現(xiàn)你要求的功能:

long lang=64509;

String str1=Long.toBinaryString(lang);//將給定的數(shù)轉(zhuǎn)為二進(jìn)制字串

String str2=Long.toBinaryString(~lang);//將給定的數(shù)取反轉(zhuǎn)為二進(jìn)制字串

//將取反后的二進(jìn)制串取最后的 長(zhǎng)度與第一個(gè)串長(zhǎng)度相等 的子串,這是我們需要的二進(jìn)制串

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

//將它轉(zhuǎn)換為十進(jìn)制整數(shù)

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

System.out.println(i);

具體理論知識(shí)如下所示:

先要理解一些概念:

在2進(jìn)制中,負(fù)數(shù)是以它正值的補(bǔ)碼形式表達(dá)

原碼:一個(gè)整數(shù),按照絕對(duì)值大小轉(zhuǎn)換成的二進(jìn)制數(shù),稱為原碼。

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

反碼:將二進(jìn)制數(shù)按位取反,所得的新二進(jìn)制數(shù)稱為原二進(jìn)制數(shù)的反碼。

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

比如:將5的二進(jìn)制表達(dá)式的每一位取反,得

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 互為反碼。

補(bǔ)碼:反碼加1稱為補(bǔ)碼。

也就是說(shuō),要得到一個(gè)數(shù)的補(bǔ)碼,先得到反碼,然后將反碼加上1,所得數(shù)稱為補(bǔ)碼。

那么,5的補(bǔ)碼為:

1111 1111 1111 1111 1111 1111 1111 1010 + 1 =

1111 1111 1111 1111 1111 1111 1111 1011

所以,-5 在計(jì)算機(jī)中的二進(jìn)制表達(dá)為:

1111 1111 1111 1111 1111 1111 1111 1011

轉(zhuǎn)換為十六進(jìn)制:0xFFFFFFFB。

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

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

int型儲(chǔ)存32個(gè)二進(jìn)制位,~這個(gè)符號(hào)是按位取反,就是求i的反碼。

即得到1111 1111 1111 1111 1111 1111 1111 1010

上面這串二進(jìn)制代表一個(gè)負(fù)數(shù),將它轉(zhuǎn)換成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

這個(gè)值就是5的按位取反所得到的int整數(shù)的絕對(duì)值(注意:5按位取反得到的是負(fù)數(shù))

所以轉(zhuǎn)換為int型為:6

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

JAVA中對(duì)一個(gè)數(shù)進(jìn)行取反操作到底是怎么計(jì)算的(包括正數(shù)和負(fù)數(shù)),負(fù)數(shù)的原碼到底如何表示.

先取得數(shù)的反碼 然后按位取反 此時(shí)得到的是補(bǔ)碼(因?yàn)樵贘AVA中是使用補(bǔ)碼來(lái)表示二進(jìn)制數(shù)據(jù)的) 再變?yōu)樵a就行了 負(fù)數(shù)的原碼就是1XXXXX 第一位是符號(hào)位 后面是數(shù)值位

Java二進(jìn)制反轉(zhuǎn)

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("請(qǐng)輸入要反轉(zhuǎn)的數(shù)字:");

s = sc.nextLine();

tempbyte = Byte.valueOf(s);

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

System.out.println("翻反轉(zhuǎn)后十進(jìn)制: " + 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("原數(shù)二進(jìn)制為: " + binaryString);

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

System.out.println("反轉(zhuǎn)后二進(jìn)制為: " + 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中按位取反運(yùn)算的詳解

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

比如樓主說(shuō)的10

二進(jìn)制表示就是00000000

00000000

00000000

00001010

取反后就是11111111

11111111

11111111

11110101

這在十進(jìn)制中就是-11

而他的二進(jìn)制原碼表示就是-1011

網(wǎng)頁(yè)標(biāo)題:java代碼二進(jìn)制數(shù)取反 二進(jìn)制取相反數(shù)
網(wǎng)站鏈接:http://chinadenli.net/article14/dodecge.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管網(wǎng)站改版、虛擬主機(jī)、網(wǎng)站策劃、自適應(yīng)網(wǎng)站全網(wǎng)營(yíng)銷推廣

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)