搜尋
首頁JavaJava基礎偷偷看了點電腦基礎,從此學Java猶如開掛!

學習Java之前,我想問一個問題,你們覺得有沒有必要學習電腦基礎?

很多人覺得沒有必要看那些枯燥晦澀的基礎知識,不如直接從HelloWorld開始,先接觸程序,有個印象,程式碼跑起來,然後再逐步深入學習程式的語法,到最後使用程序搭建項目,也就是實戰學習法。

首先我不否定這樣的學習方式,確實對某部分同學來說是比較適用的,尤其是一些著急找工作的同學,先學會怎麼去用,至於原理,可以以後慢慢去深入了解,畢竟沒有什麼比麵包?更重要。

但是對於我們大對數從頭開始學習的同學,我還是建議從計算機的一些基礎小知識開始,了解程式設計的思想和常識,這對於我們以後的學習也是非常有幫助的。就好比蓋房子,有的人蓋的是茅草屋,有的人蓋的是泥瓦屋,而有人卻想著蓋二樓小洋樓。基礎的深淺程度,直接決定了以後成就的高低。

那麼現在我們就來簡單了解下電腦的一些基礎小知識。

一.機器語言的分類

機器語言

機器語言就是電腦能直接能辨識的語言,它是直接用二進位代碼指令表達的電腦語言。它是由一串0和1組成的代碼,有一定的位數,並分成若干段,各段的編碼表示不同的意義。例如下面就是一串簡單的機器碼:

010100100000  // 520

那麼很多人問,為什麼機器碼是0和1組成的?

因為機器碼需要控制電腦硬體對程式指令做出反應,0代表低電位,1代表高電位,這樣才能產生邏輯電路,就相當於控制開關一樣,0是關閉,1是打開。

組合語言

組合語言是一種開發人員的語言,由於機器語言都是0和1,開發人員難以直接操控和使用,那麼就需要使用一些特殊的符號作為二進位碼的標記,開發人員透過輸入這些特殊的符號來完成指令下發,讓電腦為我們工作,這些特殊的符號就是組合語言。電腦不能直接辨識組合語言,需要用一種軟體將組合語言翻譯成機器語言。它與機器語言的區別在於指令的表示方法上,彙編語言的主體是彙編指令,相比於機器指令,程式設計人員更容易記住。

MOV AX,1234H  //汇编指令: 寄存器AX的内容送到1234H中
101110000011010000010010 //机器指令

高階語言

高階語言常見如:c,c ,java,python,php等等。

它更接近我們平時正常的人思維,其最大的特點是編寫容易,程式碼可讀性好。實現相同的功能,使用高階語言耗時更少,程式碼量更短,更容易閱讀。其次,高階語言是可移植的,也就是說,只需稍作修改甚至不用修改,就可將一段程式碼運行在不同類型的電腦上。

print('Hello World')   // python版HelloWorld

我们从这个程序可以看出来,高级语言屏蔽了机器内部指令运行细节,我们可以像写作一样书写程序,而不用关心语言内部的实现细节,这大大提高了我们的开发效率,节约开发成本

当然,其缺点也很明显,使用高级语言编写的程序运行时,需要先将其翻译成低级语言计算机才能运行它,在翻译过程中可能会产生一些多余的部分,运行效率低些。另外,对硬件的可控性相对于低级语言弱些,目标代码量较大


二. 进制

推荐使用在线工具进行进制转换

https://tool.oschina.net/hexconvert/

二进制

由数字0和1组成,逢二进一,比如机器码就是二进制的,是最简单的计算机可读懂的代码,例如 0101(表示十进制数字5)。

八进制

由1到7组成的数字串,数字最大不会超过7,逢八进一,例如 157(表示十进制数字111)

十进制

我们日常使用的数字都是十进制类型的,逢十进一,例如  0123456789。

十六进制

由1到9,a-f(或者是A-F,分别代表10-15)组成的数字串,数字最大不会超过15,其中字母是不区分大小写的,逢十六进一,例如0F83(表示十进制数3971)

进制转换

1. K进制与十进制数的转换

假设有一个n+1位的K进制数,它的形式如下:

AnAn-1…A3A2A1A0
则它的大小为:(也就是对应的我们能看懂的十进制数为)

A0 * K^0 + A1 * K^1....+ An * K^n      //K^n表示K的n次方

二进制数:10101 转换成 十进制数为:21

 1*2^4 + 0*2^3 + 1*2^2 + 0*2^1+1*2^0 = 21

2. 十进制与k进制的转换

短除法。

举个栗子:

偷偷看了點電腦基礎,從此學Java猶如開掛!


从图可以看出,用十进制数21一直除以2,每次得到的余数倒数就是最后的二进制数10101。同样,十进制转八进制、十进制转十六进制都是一样的套路,非常简单。



3. 二进制与八进制和十六进制之间转换


8是2的3次方,16是2的4次方,所以这之间的转换存在一种快捷方法。以2转8示例,将2进制从低位到高位,每3个一组,如果是十六进制就每4个一组,高位不足3位的补0,然后将每组依次转换成对应的十进制,得到的结果就是对应的8进制或者16进制。

二进制10101100101转八进制:2545

偷偷看了點電腦基礎,從此學Java猶如開掛!

二进制10101100101转十六进制:565
偷偷看了點電腦基礎,從此學Java猶如開掛!

三. 原码、反码、补码

在计算机中,最小的单位是位,也称为比特(bit)。而另一个常用单位是字节,一个字节是8位,也就是8比特,所以我们常用的二进制表示法是8位。

原码

原码是一种非常常见的二进制表示形式。在原码中,为了区别正数和负数,将二进制中的最高位作为符号位,如果是0表示正数,如果是1表示负数。

举个栗子:

0000 0001   // 表示 1
1000 0001   // 表示 -1


反码

不知道大家有没有注意到原码的一个问题,那就是负数参与计算的时候,比如

偷偷看了點電腦基礎,從此學Java猶如開掛!

出现了一个大问题,就是1 + (-1) 不等于0,而等于 -2。


这可咋整?

為了解決這個問題,聰明的電腦前輩們想到了反碼。原碼轉反碼的規則為:正數的反碼為其本身,負數的反碼是符號位元不變,其他位元取反取反的規則就是如果是0就變成1,如果是1就變成0
我們來看下轉成反碼的計算:

偷偷看了點電腦基礎,從此學Java猶如開掛!

得到的結果是1111 1111。

哎?這不對啊,怎麼不是0?

別急,這只是反碼的計算結果,我們將反碼轉成原碼1111 1111 —> 1000 0000,得到-0, 也就是0,完全符合預期的結果,也解決了原碼的計算問題。


補碼

反碼解決了負數計算的問題,但還有一個問題沒有解決,就是 -0 。由於負數最高位的符號位的存在,導致原本八位的二進制數能表示2的8次方即256個數字,使用原碼與反碼卻只能表示255個,這對我們來說是非常難受的,那麼這少的一個數怎麼能彌補上呢?

禿頭的程式設計師老哥哥們也想出了對應的解決辦法-補碼。

原碼轉補碼的規則:正數的補碼就是其本身,負數的補碼是符號位元不變,其餘位數取反(即變成反碼)再加1

舉個栗子:

原碼:0000 0001 , 補碼:0000 0001
原碼:1000 0001 , 補碼:1111 1111

計算一下:

偷偷看了點電腦基礎,從此學Java猶如開掛!

從上面看出,利用補碼計算我們得到了0 (而不是-0 ),解決了少一個數字的問題。


在補碼中,規定了0的表示為0000 0000,而1000 0000表示的為-128,注意,這是規定。


注意事項

  1. #反碼與補碼不能直接使用二進位轉十進位的規則,轉成對應的十進制得到對應的大小,應該先轉成原碼後才可以。也就是說原碼才是直接與大小進行關聯的一種表現形式

  2. 在電腦系統中,數值一律以補碼的形式進行表示與儲存

  3. 正數的原碼、反碼與補碼都是一樣的

  4. #負數原轉反:符號位元不變,其餘位元取反

  5. 負數原轉補:符號位元不變,其餘位元取反後加一

  6. 負數補轉反:符號位元不變,其餘位元減一

  7. 負數補轉原:符號位元不變,其餘位元減一後取反

以上是偷偷看了點電腦基礎,從此學Java猶如開掛!的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:Java学习指南。如有侵權,請聯絡admin@php.cn刪除

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境