tft每日頭條

 > 生活

 > 程序員二進制計算器怎麼用

程序員二進制計算器怎麼用

生活 更新时间:2024-08-17 23:11:23
1 計算計中的數據與二進制 1.1 數據

計算機中的數據總是以二元狀态存在的,通常用0或1兩種符号來表示,它也方便用于表示電路中的高低電平。

1.2 二進制

在計算機中是用二進制來表示數據的。二進制中1=1,2=10,4=100,8=1000。生活中,我們用得比較多的就是10進制,那麼要怎麼把10進制與2進制進行轉換呢?

十進制轉換成二進制

程序員二進制計算器怎麼用(程序員必須了解的計算機基礎之二進制)1

10進制轉換成二進制

二進制轉換成十進制

程序員二進制計算器怎麼用(程序員必須了解的計算機基礎之二進制)2

二進制轉換成十進制

2 原碼、反碼和補碼

在計算機中,最小的單位是位(bit),也就是二進制中的每一個數值,最小的數據存儲單位是字節(byte)。一個字節由8位組成,這8位中最左側的一位是符号位,0表示正數,1表示負數。

2.1 原碼

原碼就是數據的實際值,如1的原碼為 0000 0001,-2的原碼為1000 0010,0的原碼為0000 0000。8位二進制數能表示的最大範圍是[-127,127]。

2.2 反碼

正數的反碼是原碼本身,負數的反碼是在原碼的基礎上,符号位不變,其餘位取反,如1的原碼是0000 0001,反碼也是0000 0001;-2的原碼為1000 0010,反碼為1111 1101。8位二進制數能表示的最大範圍是[-127,127]。

2.3 補碼

正數的補碼是原碼本身,負數的補碼是原碼的基礎上符号位不變,其餘位取反然後加1。8位二進制數能表示的最大範圍是[-128,127]。

【注:0的原碼、反碼、補碼是同一個!】

2.4 計算計中補碼參與運算

1 (-2) = -1,對應的原碼為 0000 0001 1000 0010 = 1000 0011 = -3, 這是不正确的。

對應的反碼為 0000 0001 1111 1101 = 1111 1110,轉換成原碼 1000 0001=-1,正确。

如果 1-1用反碼計算的話,0000 0001 1111 1110 = 1111 1111,轉換成原碼就是1000 0000 = -0,是錯誤的表示。

所以如果用補碼來計算0000 0001 1111 1111 = 0000 0000,對應的原碼也是0000 0000=0,正确。在補碼中1000 0000表示-128。

2.5 溢出

-35 -128用補碼參與運算結果是多少?

程序員二進制計算器怎麼用(程序員必須了解的計算機基礎之二進制)3

溢出

如圖,計算結果超出了8位,實際結果應該是-163,但是8位能表示的範圍是[-128, 127],所以上面的計算結果溢出了。取後8位即為溢出的結果93。

通過代碼表示:

public static void main(String[] args) { byte b1 = (byte) -35; byte b2 = (byte) -128; byte b3 = (byte) (b1 b2); // 這裡的結果是93 System.out.println("b3 = " b3); // 這裡也是93 System.out.println(127 - 35 1); }

溢出後的結果遵循這個規則,如果-128向下溢出1位,結果是127,溢出2位,結果是126,以此類推,-128溢出35,結果就是93。同理,127向上溢出1位就是-128。

2.6 單位及換算

1B = 8b

1KB = 1024B

1MB = 1024KB

1GB = 1024MB

3 位運算3.1 按位與運算(&)

按位與的運算規則是:相同位都為1則為1,否則為0;

舉例:

  • 1 & 3的結果是多少?

1:原碼:0000 0001,反碼:0000 0001,補碼:0000 0001;

3:原碼:0000 0011,反碼:0000 0011,補碼:0000 0011;

所以:0000 0001 & 0000 0011 = 0000 0001,即 1 & 3 = 1;

  • 1 & -3的結果是多少?

1:原碼:0000 0001,反碼:0000 0001,補碼:0000 0001;

-3:原碼:1000 0011,反碼:1111 1100,補碼:1111 1101;

所以:1111 1101 & 0000 0001 = 0000 0001,對應的原碼為0000 0001,即1 & -3 = 1;

  • -1 & -2的結果是多少?

-1:原碼:1000 0001,反碼:1111 1110,補碼:1111 1111;

-2:原碼:1000 0010,反碼:1111 1101,補碼:1111 1110;

所以:1111 1101 & 1111 1110 = 1111 1100,對應的原碼為1000 0010,即-1 & -2 = -2;

3.2 按位或運算(|)

按位或的運算規則是:相同位隻要有一個為1則為1,否則為0。

舉例:

  • 1 | 3的結果是多少?

1:原碼:0000 0001,反碼:0000 0001,補碼:0000 0001;

3:原碼:0000 0011,反碼:0000 0011,補碼:0000 0011;

所以:0000 0001 | 0000 0011 = 0000 0011,即 1 & 3 = 3;

3.3 按位異或(^)

按位異或的運算規則是:相同位相同則為0,不同則為1。

舉例:

  • 1 ^ 3的結果是多少?

1:原碼:0000 0001,反碼:0000 0001,補碼:0000 0001;

3:原碼:0000 0011,反碼:0000 0011,補碼:0000 0011;

所以:0000 0001 ^ 0000 0011 = 0000 0010,即 1 & 3 = 2;

3.4 右移運算(>>)

右移規則:符号位不變,低位(0)補齊,符号位補移出的高位(1)。

舉例:

- -3 >> 5:

-3:原碼:1000 0011,反碼:1111 1100,補碼:1111 1101;

1111 1101,右移5個,1000 0111,符号位補高位1111 1111,對應的原碼1000 0001,即-3 >> 5 = -1。

- 3 >> 5

3:原碼:0000 0011,反碼:0000 0011,補碼:0000 0011;

0000 0011右移5個,0000 0000,符号位補高位,結果還是0000 0000,即 3 >> 5 = 0;

3.5 左移運算(<<)

左移規則:符号位不變,低位補齊。

舉例:

-3 << 5:

-3:原碼:1000 0011,反碼:1111 1100,補碼:1111 1101;

1111 1101左移5位,1010 0000,對應的反碼是1001 1111,原碼是1110 0000,即-3 << 5 = -96。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved