久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

跟光磊學(xué)研發(fā)第1章軟件開發(fā)必知必會的計算機(jī)基礎(chǔ)(計算機(jī)的數(shù)據(jù)都是以二進(jìn)制的補(bǔ)碼存儲的)

 山峰云繞 2022-08-03 發(fā)布于貴州

   (計算機(jī)的數(shù)據(jù)都是以二進(jìn)制的補(bǔ)碼存儲的)


https://m.toutiao.com/is/2TCgfoN/?=計算機(jī)組成原理 


1. 計算機(jī)基本概念

從現(xiàn)在開始大家跟著我學(xué)習(xí)軟件開發(fā),,這樣也就意味著我們以后每天都要和計算機(jī)打交道,例如使用臺式機(jī),、筆記本電腦來學(xué)Java開發(fā)相關(guān)的技術(shù),,學(xué)完以后去公司使用筆記本、臺式機(jī)來開發(fā)Java項目,使用服務(wù)器部署Java項目,。因此我們需要對整個計算機(jī)系統(tǒng)有個基本的了解,。

1.1 什么是計算機(jī)

計算機(jī)(Computer)俗稱電腦,是一種高速計算的電子機(jī)器,,可以進(jìn)行數(shù)值運(yùn)算,,邏輯判斷,能夠接收或者是存儲信息數(shù)據(jù)(文本,、圖片,、音頻、視頻),,并且可以按照存儲在其內(nèi)部的程序?qū)A康臄?shù)據(jù)進(jìn)行高速,、自動化的處理,然后將處理的結(jié)果輸出的一種現(xiàn)代化的智能電子設(shè)備,。

1.2 常見的計算機(jī)

日常生產(chǎn)和生活中常見的計算機(jī)有手機(jī),、平板電腦、筆記本電腦,、臺式機(jī)都是屬于計算機(jī),

除此以外還有提供各種應(yīng)用(電商,、支付、物流,、金融)的大型服務(wù)器集群(Server Cluster),,服務(wù)器就是一臺高配的電腦,,服務(wù)器一般放在機(jī)房,所以一般人是接觸不到的,,互聯(lián)網(wǎng)公司一般都會安排Linux運(yùn)維工程師管理這些服務(wù)器,,服務(wù)器集群就是成千上萬臺(甚至幾十萬臺,上百萬臺)高配的電腦,。

服務(wù)器

1.3 計算機(jī)的應(yīng)用場景

計算機(jī)幾乎無所不在,,幾乎無所不能

計算機(jī)的軟硬件的結(jié)合實現(xiàn)了生活中的常見需求

  • 打游戲(王者榮耀)
  • 聽歌(QQ音樂、網(wǎng)易云音樂)
  • 看電影,、追劇(愛奇藝,、騰訊視頻、優(yōu)酷)
  • 看學(xué)習(xí)視頻(bilibili)
  • 打車(高德,、美團(tuán)打車,、滴滴)
  • 購物(淘寶、京東)
  • 在線會議(騰訊會議,、金山會議)
  • 聊天(微信,、企業(yè)微信、釘釘)
  • 收發(fā)郵件(網(wǎng)易郵箱大師,、QQ郵箱)

2. 計算機(jī)系統(tǒng)組成

計算機(jī)系統(tǒng)是由計算機(jī)硬件系統(tǒng)和計算機(jī)軟件系統(tǒng)兩部分組成

2.1 計算機(jī)硬件系統(tǒng)組成

計算機(jī)硬件(Hardware)就是各種客觀存在的計算機(jī)相關(guān)的硬件設(shè)備,,例如CPU、內(nèi)存,、硬盤,、網(wǎng)卡、主板等等,。

2.2 計算機(jī)軟件系統(tǒng)組成

計算機(jī)軟件(Software)就是利用計算機(jī)相關(guān)的硬件設(shè)備來完成日常生活中常見的需求,,例如聽歌、看電影,、上網(wǎng),、購物、上網(wǎng)課等等,。這些需求都是需要通過計算機(jī)的軟硬件的協(xié)作來共同完成的,。

計算機(jī)系統(tǒng)組成

3.計算機(jī)硬件系統(tǒng)

3.1 計算機(jī)硬件之CPU

CPU(Central Processing Unit) 中文是中央處理器,CPU是計算機(jī)中最核心的部件,,類似于人的大腦


CPU是由運(yùn)算器和控制器組成,運(yùn)算器是負(fù)責(zé)數(shù)據(jù)的運(yùn)算,,控制器是用于控制其他設(shè)備協(xié)同工作,。

CPU主要是用來執(zhí)行計算機(jī)指令以及處理計算機(jī)軟件的數(shù)據(jù)

  • 目前主流的服務(wù)器CPU廠商是Intel,主流的服務(wù)器CPU是Intel 志強(qiáng) 可擴(kuò)展系列
  • 主流的PC(筆記本,、臺式機(jī))領(lǐng)域的CPU廠商是Intel,、AMD,、蘋果Intel最強(qiáng)的CPU是Intel 12代 i9 12900ks\12900k\12900kf蘋果最強(qiáng)的CPU是M1 Ultra(2個M1 Max)

3.2 計算機(jī)硬件之內(nèi)存

內(nèi)存是計算機(jī)的存儲部件,內(nèi)存也被稱為內(nèi)部存儲器,,內(nèi)存的作用就是用于暫時存儲CPU運(yùn)算的數(shù)據(jù)和指令以及和硬盤等外部設(shè)備進(jìn)行數(shù)據(jù)交換,。


CPU可以直接訪問內(nèi)存中的數(shù)據(jù),而且讀寫效率比較高

但是內(nèi)存的容量一般比較小(16GB-256GB),不能永久存儲數(shù)據(jù),,一旦斷電之后就會丟失數(shù)據(jù),,如果你之前使用過臺式機(jī)開發(fā)程序那么就應(yīng)該深有感觸,臺式機(jī)關(guān)機(jī)之后,,如果之前的數(shù)據(jù)沒有保留就會丟失,,因為臺式機(jī)沒有電池,因此我們以后在使用電腦的使用經(jīng)常使用快捷鍵Ctrl+s/Command+s 將數(shù)據(jù)保存到磁盤,從而實現(xiàn)永久存儲數(shù)據(jù),。

內(nèi)存的廠商有三星,、金斯頓、美商海盜船,、威剛等等

3.3 計算機(jī)硬件之硬盤

硬盤是計算機(jī)的存儲部件,,主要是用于永久存儲數(shù)據(jù)(斷電之后數(shù)據(jù)不會丟失),容量比較大,,通常都是TB級,,例如1TB,2TB,,4TB,8TB,,其中1TB=1024GB

CPU不能直接訪問硬盤中的數(shù)據(jù),如果想要訪問硬盤中的數(shù)據(jù),,需要使用程序?qū)⒂脖P中的數(shù)據(jù)加載到內(nèi)存中再提供給CPU訪問,。

硬盤分為機(jī)械硬盤和固態(tài)硬盤

機(jī)械硬盤容量大(TB級),價格便宜,,讀寫速度慢,,目前主要機(jī)械硬盤廠商有希捷、西部數(shù)據(jù)


固態(tài)硬盤容量大(TB級),,價格貴,,讀寫速度高,目前主要的固態(tài)硬盤廠商有三星,、金斯頓


在選配硬盤的時候為了考慮性價比,,通常都是機(jī)械硬盤和固態(tài)硬盤混合使用,例如系統(tǒng)盤都是固態(tài)的,,數(shù)據(jù)盤使用機(jī)械硬盤,,這樣開機(jī)快,軟件運(yùn)行速度快,節(jié)省時間就是掙錢(時間就是金錢),。
如果不考慮性價比那么推薦全部使用固態(tài)硬盤,。

3.4 計算機(jī)硬件之網(wǎng)卡

網(wǎng)卡是用于網(wǎng)絡(luò)上的數(shù)據(jù)收發(fā),網(wǎng)卡分為有線網(wǎng)卡和無線網(wǎng)卡,,日常家用的電腦網(wǎng)卡一般是千兆網(wǎng)卡,,而服務(wù)器的網(wǎng)卡是萬兆網(wǎng)卡。

4.計算機(jī)軟件系統(tǒng)

4.1 為什么會有軟件

假如沒有軟件,,普通人(不懂計算機(jī)的人)是沒有辦法利用計算機(jī)硬件資源來實現(xiàn)日常生活中常見的需求,,例如訂外賣、上網(wǎng),、聽歌,、上網(wǎng)課、看電影,、購物等等,。
軟件出現(xiàn)的目的就是為了讓普通人更好地利用計算機(jī)硬件的資源來實現(xiàn)日常生活中常見的需求。
軟件實現(xiàn)了更好的人機(jī)交互
計算機(jī)軟件的價值大于計算機(jī)硬件價值,例如微信的市值價值幾千億RMB

4.2 軟件的組成

軟件是程序員/軟件工程師/開發(fā)工程師/碼農(nóng)/新型農(nóng)民工采用某種編程語言(C/C++
/Java/Python/Go/JavaScript/Scala/Kotlin)編寫一系列的
指令以及不同業(yè)務(wù)場景產(chǎn)生的數(shù)據(jù)組成,,軟件=指令+數(shù)據(jù),。例如微信聊天的聊天內(nèi)容就是數(shù)據(jù),而發(fā)送微信聊天消息就是指令,。

4.3軟件的分類

軟件分為系統(tǒng)軟件和應(yīng)用軟件兩大類

計算機(jī)系統(tǒng)組成

4.4 軟件的交互方式

運(yùn)行在不同操作系統(tǒng)的軟件交互方式是不一樣的

  • 服務(wù)端的軟件交互方式是基于命令行/終端的字符界面,,主要提供給Linux運(yùn)維工程師/開發(fā)工程師使用
  • 桌面端的軟件交互方式是基于鼠標(biāo)、鍵盤的圖形化界面 主要提供給普通用戶/開發(fā)工程師/Linux運(yùn)維工程師使用
  • 移動端的軟件交互方式是手勢觸控,、語音的圖形化界面 主要是提供給普通用戶和開發(fā)工程師使用

5.計算機(jī)體系結(jié)構(gòu)

軟件是運(yùn)行在硬件之上的

應(yīng)用軟件/系統(tǒng)軟件都是運(yùn)行在操作系統(tǒng)上的

操作系統(tǒng)是由操作系統(tǒng)內(nèi)核(OS Kernel)和操作系統(tǒng)外殼( OS Shell)組成

計算機(jī)體系結(jié)構(gòu)

6.推薦給Java工程師的計算機(jī)配置

6.1 Java項目的開發(fā)流程

互聯(lián)網(wǎng)公司的崗位:運(yùn)營,、產(chǎn)品經(jīng)理、開發(fā),、測試,、運(yùn)維、項目經(jīng)理

  1. Java工程師在開發(fā)環(huán)境開發(fā)Java項目
  2. Java項目開發(fā)完成以后部署到測試環(huán)境給測試人員提測
  3. Java項目提測通過以后部署到生產(chǎn)環(huán)境對外提供服務(wù)

開發(fā)環(huán)境使用的操作系統(tǒng)是Windows或者macOS

Windows11

macOS12

測試環(huán)境,、生產(chǎn)環(huán)境使用的系統(tǒng)是Linux(CentOS,、Ubuntu Server)

CentOS7

CentOS8

Ubuntu Server 20.04

6.2 Java工程師常用的工具

6.2.1 開發(fā)環(huán)境(Windows/macOS)

  • JDK
  • Visual Studio Code
  • IntelliJ IDEA
  • MySQL \ Navicat
  • Tomcat
  • Git
  • Maven
  • Postman/Aipfox
  • Wireshark
  • Chrome
  • VMware Workstation(macOS版本叫做 VMware Fusion)\ Parallels Desktop
  • Linux (CentOS 、Ubuntu Server) 模擬公司的測試環(huán)境和生產(chǎn)環(huán)境
  • Xmanager\ MobaXterm Windows特有 Termius macOS特有
  • 微信,、企業(yè)微信\ 釘釘
  • WPS,、Office
  • Xmind
  • draw.io/ 億圖圖示

6.2.2 測試環(huán)境/生產(chǎn)環(huán)境(CentOS、Ubuntu Server)

  • JDK
  • MySQL
  • Tomcat
  • Gitlab
  • Maven /Gradle
  • Jenkins
  • Nginx
  • Redis
  • RabbitMQ\ RocketMQ\ Kakfa
  • ELK
  • Docker/Kubernates
  • Apollo 分布式配置中心
  • Skywalking 分布式鏈路追蹤
  • XXL-Job 分布式任務(wù)調(diào)度中心

在測試環(huán)境,、生產(chǎn)環(huán)境中一個服務(wù)可能會有多個實例,,比如MySQL服務(wù)一般會部署三臺服務(wù)器

6.3 推薦Java工程師的計算機(jī)配置

Java工程師的計算機(jī)硬件配置只需要重點關(guān)注CPU、內(nèi)存,、硬盤即可

學(xué)習(xí)Java相關(guān)的技術(shù)用到幾十個工具,,而且為了有接近真實的項目經(jīng)驗,,還要模擬公司的測試環(huán)境、生產(chǎn)環(huán)境,。

大型的分布式系統(tǒng)架構(gòu)設(shè)計

因此我們需要配置非常高(價格貴)的電腦,但是如果以后你的電腦不能滿足需求(如果低于32G內(nèi)存,,32G內(nèi)存對于開發(fā)夠用),,大家可以去購買阿里云或者是騰訊云的云服務(wù)器用來模擬公司的測試環(huán)境、生產(chǎn)環(huán)境,。

  • 買硬件產(chǎn)品買新不買舊 因為新的比舊的好,,硬件產(chǎn)品每年都在升級(性能更強(qiáng))
  • 只有高配的硬件才能把大型分布式系統(tǒng)架構(gòu)設(shè)計涉及到的各種服務(wù)集群運(yùn)行起來

選筆記本還是臺式機(jī)?
如果你沒有移動辦公的需求,,那么推薦臺式機(jī),,因為臺式機(jī)的性能高于筆記本
如果你有移動辦公的需求,那么推薦使用筆記本電腦

6.3.1 Windows+Intel

  • CPU Intel 12900ks\12900k\12900kf
  • 內(nèi)存 總?cè)萘?開發(fā)環(huán)境+測試\生產(chǎn)環(huán)境)不低于64G,,128G更佳
  • 硬盤 4TB固態(tài)

6.3.2 Mac

  • CPU M1 Max 或者M(jìn)1 Ultra
  • 內(nèi)存 總?cè)萘?開發(fā)環(huán)境+測試\生產(chǎn)環(huán)境)不低于64G,128G更佳
  • 硬盤 4TB固態(tài)

MacBookPro

雖然Windows和macOS都可以做Java開發(fā),,但是還是推薦初學(xué)者選擇Windows ,至于理由就是Windows生態(tài)相比macOS系統(tǒng)的生態(tài)更加完善

7. 計算機(jī)常用單位

計算機(jī)常用單位指的是計算機(jī)的核心組件(CPU,內(nèi)存,,硬盤,,網(wǎng)卡)相關(guān)的單位,例如容量單位,、速度單位
我們需要了解計算機(jī)常用單位,,因為它們屬于計算機(jī)相關(guān)的基本常識

7.1 計算機(jī)常用容量單位

在購買電腦的時候,通常都會選擇高配置的CPU,、內(nèi)存,、硬盤等等,例如Mac Studio已經(jīng)可以選配128GB內(nèi)存,、8TB固態(tài)硬盤

Mac Studio

這里的128GB,、8TB就是常見的容量單位

在物理層面,我們使用高低電平來記錄信息,,通常都是使用高電平表示1,,低電平表示0,因此在計算機(jī)底層只能識別0和1兩種狀態(tài),。但是0和1能夠表示的內(nèi)容太少了,,因此需要更大容量的表示方法,所以出現(xiàn)了如下列表所示的容量單位

  • 位(bit):計算機(jī)最小的容量單位,,通常用于門電路
  • 字節(jié)(Byte):計算機(jī)的最基本容量單位,,通常用于表示網(wǎng)絡(luò)傳輸(上傳、下載),,文件大小的容量單位
  • 千字節(jié)(KB):通常用于表示網(wǎng)絡(luò)傳輸(上傳,、下載),文件大小的容量單位
  • 兆字節(jié)(MB): 通常用于表示網(wǎng)絡(luò)傳輸(上傳、下載),,文件大小的容量單位
  • 吉字節(jié)(GB): 通常用于表示內(nèi)存,、硬盤的單位
  • 太字節(jié)(TB): 通常用于表示內(nèi)存、硬盤的單位
  • 拍字節(jié)(PB):通常用于表示大數(shù)據(jù)系統(tǒng)處理的數(shù)據(jù)容量單位
  • 艾字節(jié)(EB):通常是用于表示互聯(lián)網(wǎng)大廠(字節(jié)跳動,、阿里巴巴,、騰訊、華為,、百度,、美團(tuán))的區(qū)域數(shù)據(jù)中心的總?cè)萘?/span>

它們的換算關(guān)系如下所示

1EB=1024PB1PB=1024TB1TB=1024GB1GB=1024MB1MB=1024KB1KB=1024Byte1Byte=8bit

生活中遇到的一個疑問:為什么我買的4T硬盤的實際可用容量大約是3.63TB

因為計算機(jī)容量單位是以1024進(jìn)行換的,但是硬盤廠商是以1000進(jìn)行換算的

計算機(jī)中4TB硬盤換算成字節(jié)

4TB=4*1024*1024*1024*1024

硬盤廠商4TB硬盤換算成字節(jié)

4TB=4*1000*1000*1000*1000

4T硬盤的實際可用容量

4*1000*1000*1000*1000/1024/1024/1024/1024≈3.63TB

4T硬盤的實際可用容量

7.2 計算機(jī)常用速度單位

7.2.1 網(wǎng)速

網(wǎng)絡(luò)常用的速度單位是Mbps

網(wǎng)絡(luò)帶寬提供商(長城,、電信等等)聲稱百兆帶寬實際上就是100Mbps,但是100M帶寬的峰值下載速度也就10MB左右,,它們之間的換算關(guān)系是100Mbit/s=(100/8)MB/s=12.5MB/s

7.2.2 CPU速度

CPU的速度一般是由CPU的時鐘頻率所體現(xiàn)的,時鐘頻率的單位是赫茲(Hz),目前主流的CPU一般都是2GHz以上,,而赫茲(Hz)就是秒分之一,,也就是每秒鐘的周期性變動重復(fù)次數(shù)的計量。

GHz,、MHz和Hz的換算關(guān)系如下所示

1KHz=1000Hz1MHz=1000KHz1GHz=1000MHz

假如你的計算機(jī)CPU的速度是5GHz

5GHz=5*1000*1000*1000=50 0000 0000

也就是說5GHz的CPU每秒鐘的變化次數(shù)是50億次

Windows系統(tǒng)可以在任務(wù)管理器的性能欄目中看到CPU的基準(zhǔn)速度

8. 計算機(jī) 原碼,、反碼、補(bǔ)碼

我們講解計算機(jī)原碼,、反碼,、補(bǔ)碼和進(jìn)制的的目的就是為了后面講解位運(yùn)算符的運(yùn)算原理

8.1 有符號數(shù)和無符號數(shù)

生活中的整數(shù)分為正整數(shù)和負(fù)整數(shù),例如+15和-15
計算機(jī)如何表示負(fù)數(shù),?

計算機(jī)內(nèi)部都是采用二進(jìn)制來存儲數(shù)據(jù),,例如0000 1111和1000 1111
整數(shù)分為有符號數(shù)和無符號數(shù)
有符號數(shù)的二進(jìn)制位由
符號位和數(shù)據(jù)位組成
有符號數(shù)的符號位是1,表示這個二進(jìn)制數(shù)是負(fù)數(shù)
有符號數(shù)的符號位是0,,表示這個二進(jìn)制數(shù)是正數(shù)
無符號數(shù)的二進(jìn)制位都是數(shù)據(jù)位,,不能表示負(fù)數(shù),最小值是0

C語言中變量可以使用signed和unsigned來表示有符號數(shù)的變量和無符號數(shù)的變量

Java語言中沒有signed和unsigned這兩個關(guān)鍵字
但是Java語言有兩個基本數(shù)據(jù)類型:short和char,,它們都是占據(jù)2個字節(jié)
short的表示范圍 -32768 - +32767 有符號數(shù)
char的表示范圍 0-65535 無符號數(shù)

8.2 原碼,、反碼、補(bǔ)碼

原碼,、反碼,、補(bǔ)碼都是數(shù)據(jù)二進(jìn)制的表示方式

  • 原碼

十進(jìn)制 +15 二進(jìn)制原碼 0000 1111 (一個字節(jié))

十進(jìn)制 -15 二進(jìn)制原碼 1000 1111 (一個字節(jié))

  • 反碼

正數(shù)的反碼就是原碼

十進(jìn)制 +15 二進(jìn)制原碼 0000 1111 (一個字節(jié)) 二進(jìn)制反碼 0000 1111 (一個字節(jié))

負(fù)數(shù)的反碼就是原碼的符號位不變,其他位(數(shù)據(jù)位)按位取反(0變1 1變0)

十進(jìn)制 -15 二進(jìn)制原碼 1000 1111 (一個字節(jié)) 二進(jìn)制反碼 1111 0000 (一個字節(jié))

  • 補(bǔ)碼

正數(shù)的補(bǔ)碼就是原碼

十進(jìn)制 +15 二進(jìn)制原碼 0000 1111 (一個字節(jié)) 二進(jìn)制反碼 0000 1111 (一個字節(jié))

二進(jìn)制補(bǔ)碼 0000 1111 (一個字節(jié))

負(fù)數(shù)的補(bǔ)碼是反碼+1

十進(jìn)制 -15 二進(jìn)制原碼 1000 1111 (一個字節(jié)) 二進(jìn)制反碼 1111 0000 (一個字節(jié))

二進(jìn)制補(bǔ)碼 1111 0001(一個字節(jié))

關(guān)于原碼,、反碼,、補(bǔ)碼的轉(zhuǎn)換規(guī)則

  1. 正數(shù)的原碼、反碼,、補(bǔ)碼都一樣
  2. 負(fù)數(shù)的原碼求補(bǔ)碼:原碼的最高位(符號位)不變,,其他位數(shù)取反得到反碼,,反碼加1得到補(bǔ)碼
  3. 負(fù)數(shù)的補(bǔ)碼求原碼:補(bǔ)碼減1得到反碼,反碼的最高位不變,,其他位數(shù)取反得到原碼

為什么原碼,、反碼、補(bǔ)碼需要相互轉(zhuǎn)換

  1. 計算機(jī)在執(zhí)行運(yùn)算的時候使用補(bǔ)碼運(yùn)算
  2. 當(dāng)我們查看計算機(jī)執(zhí)行結(jié)果的時候使用原碼

8.3 為什么使用補(bǔ)碼存儲和計算數(shù)據(jù)?

計算機(jī)的數(shù)據(jù)都是以二進(jìn)制的補(bǔ)碼存儲的

  1. 引入四個整數(shù)的原碼 (一個字節(jié))

數(shù)據(jù)

原碼表示(一個字節(jié))

1

00000001

-1

10000001

+0

00000000

-0

10000000

需求1:使用原碼計算1-1

CPU內(nèi)部只有加法器

十進(jìn)制1-1

1 - 1 = 1 + -1

1+ -1 轉(zhuǎn)換成二進(jìn)制原碼

0000 0001 + 1000 0001= 1000 0010

1000 0010 轉(zhuǎn)換成十進(jìn)制結(jié)果是-2

為什么不使用原碼來存儲和計算數(shù)據(jù)?

  1. 0使用原碼有兩種表示方式:0000 0000和 1000 0000
  2. 原碼表示的數(shù)據(jù)在運(yùn)算的時候得到的運(yùn)算結(jié)果是錯誤的

需求2:使用反碼計算 1-1

  • +1 原碼 0000 0001 反碼 0000 0001
  • -1 原碼 1000 0001 反碼 1111 1110
  • +0 原碼 0000 0000 反碼 0000 0000
  • -0 原碼 1000 0000 反碼1111 1111

數(shù)據(jù)

原碼(一個字節(jié))

反碼(一個字節(jié))

+1

0000 0001

0000 0001

-1

1000 0001

11111 1110

+0

0000 0000

0000 0000

-0

1000 0000

1111 1111

CPU內(nèi)部只有加法器

十進(jìn)制1-1

1 - 1 = 1 + -1

1+ -1轉(zhuǎn)換成二進(jìn)制反碼

 0000 0001 + 1111 1110=1111 1111

1111 1111 轉(zhuǎn)換成十進(jìn)制 -127

為什么不使用原碼來存儲和計算數(shù)據(jù)

  1. 0使用反碼有兩種表示方式:0000 0000和 1111 1111
  2. 反碼表示的數(shù)據(jù)在運(yùn)算的時候得到的運(yùn)算結(jié)果是錯誤的

需求3:使用補(bǔ)碼來計算1-1

數(shù)據(jù)

原碼

反碼

補(bǔ)碼

+1

0000 0001

0000 0001

0000 0001

-1

1000 0001

1111 1110

1111 1111

+0

0000 0000

0000 0000

0000 0000

-0

1000 0000

1111 1111

0000 0000

CPU內(nèi)部只有加法器

十進(jìn)制1-1

1 - 1 = 1 + -1

轉(zhuǎn)換成二進(jìn)制的補(bǔ)碼

0000 0001 + 1111 1111 =0000 0000

因為補(bǔ)碼解決了原碼,、反碼的兩個問題,,因此計算機(jī)會使用補(bǔ)碼來存儲和運(yùn)算數(shù)據(jù)。

9. 計算機(jī)進(jìn)制

9.1 計算機(jī)進(jìn)制介紹

進(jìn)制是一種計數(shù)的方式,,也稱為進(jìn)位計數(shù)法或者位值計數(shù)法,進(jìn)制使用有限的數(shù)字符號表示無限的數(shù)值,,使用的數(shù)字符號的數(shù)量稱為這種進(jìn)制的基數(shù)或者是底數(shù),,例如十進(jìn)制就是由0-9之間的十個數(shù)字組成的。

相同進(jìn)制類型的數(shù)據(jù)在進(jìn)行運(yùn)算的時候會遵守:加法:逢R進(jìn)1,,減法:借1當(dāng)R,,這里的R表示進(jìn)制

計算機(jī)常用的進(jìn)制有十進(jìn)制、二進(jìn)制,、八進(jìn)制,、十六進(jìn)制四種。

  • 十進(jìn)制:生活中使用最多的一種進(jìn)制,,例如賬戶余額,,開發(fā)人員的薪水等等,運(yùn)算的時候逢10進(jìn)1,,借1當(dāng)10,,十進(jìn)制的權(quán)重依次是 10^010^1,、10^2,、10^310^4 等等
1234=1000+200+30+4=1*10^3 + 2*10^2 + 3*10^1+ 4*10^0
  • 二進(jìn)制:在計算機(jī)底層,,數(shù)據(jù)都是以二進(jìn)制的補(bǔ)碼存儲,,運(yùn)算的時候逢2進(jìn)1,借1當(dāng)2,整數(shù)有正整數(shù)和負(fù)整數(shù),,二進(jìn)制中最高位(左邊第一位)用于表示符號位,,符號位如果是0表示正整數(shù),符號位如果是1表示負(fù)整數(shù),,二進(jìn)制的權(quán)重依次是2^0,、2^12^2,、2^3,、2^4等等
  • 八進(jìn)制,、十六進(jìn)制的出現(xiàn)是為了簡化二進(jìn)制,因為一個八進(jìn)制表示三個二進(jìn)制位,,一個十六進(jìn)制表示四個二進(jìn)制位

進(jìn)制名稱

組成

數(shù)值示例

應(yīng)用場景

二進(jìn)制

0,1

1010

內(nèi)存的數(shù)據(jù)存儲

八進(jìn)制

0,1,2,3,4,5,6,7

017(0開頭)

Linux權(quán)限系統(tǒng)

十進(jìn)制

0,1,2,3,4,5,6,7,8,9

10

整數(shù)默認(rèn)進(jìn)制

十六進(jìn)制

0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f

0x1F

數(shù)據(jù)的內(nèi)存地址,、MAC地址、IPV6地址

9.2 正整數(shù)的十進(jìn)制和二進(jìn)制相互轉(zhuǎn)換

由于計算機(jī)底層只能識別二進(jìn)制數(shù)據(jù),,但是生活中使用的是十進(jìn)制居多,,因此會產(chǎn)生十進(jìn)制和二進(jìn)制之間的相互轉(zhuǎn)換

9.2.1 正整數(shù)的十進(jìn)制轉(zhuǎn)二進(jìn)制

9.2.1.1 除2取余法

除2取余法:使用十進(jìn)制正整數(shù)不斷除以2取數(shù)余數(shù),直到商為0時將余數(shù)逆序排序

需求:將正整數(shù)89使用除2取余法轉(zhuǎn)換為二進(jìn)制

轉(zhuǎn)換過程

使用Windows自帶的計算器驗證結(jié)果

  • HEX表示十六進(jìn)制
  • DEC 表示十進(jìn)制
  • OCT 表示八進(jìn)制
  • BIN 表示二進(jìn)制

使用Windows自帶的計算器驗證結(jié)果

9.2.1.2 拆分法

拆分法:將十進(jìn)制整數(shù)拆分為若干個二進(jìn)制權(quán)重的和,,有權(quán)重下面寫1,,沒有就寫0

但是使用拆分法的時候需要提前了解二進(jìn)制權(quán)重和十進(jìn)制對應(yīng)關(guān)系關(guān)系

二進(jìn)制權(quán)重

二進(jìn)制

十進(jìn)制

2^0

1

1

2^1

10

2

2^2

100

4

2^3

1000

8

2^4

10000

16

2^5

100000

32

2^6

1000000

64

2^7

10000000

128

2^8

100000000

256

2^9

1000000000

512

2^10

10000000000

1024

需求:使用拆分法實現(xiàn)將正整數(shù)89轉(zhuǎn)換成二進(jìn)制

89=64+16+8+1

64		32		16		8		4		2		11   	0     1   	1     0     0     1

9.2.2 正整數(shù)的二進(jìn)制轉(zhuǎn)十進(jìn)制

加權(quán)法

加權(quán)法:使用二進(jìn)制中的每個數(shù)字乘以當(dāng)前位的權(quán)重再累加起來

需求:將二進(jìn)制整數(shù) 1011001 轉(zhuǎn)成十進(jìn)制

1011001=1*2^0 + 1*2^3 + 1*2^4 + 1*2^6= 1+8 +16+ 64=89

9.3 負(fù)整數(shù)的十進(jìn)制和二進(jìn)制相互轉(zhuǎn)換

9.3.1 負(fù)整數(shù)的十進(jìn)制轉(zhuǎn)換二進(jìn)制

負(fù)整數(shù)的十進(jìn)制轉(zhuǎn)換二進(jìn)制:求十進(jìn)制負(fù)整數(shù)的補(bǔ)碼

關(guān)于原碼、反碼,、補(bǔ)碼的轉(zhuǎn)換規(guī)則

正數(shù)的原碼,、反碼、補(bǔ)碼都一樣負(fù)數(shù)的原碼求補(bǔ)碼:原碼的最高位(符號位)不變,,其他位數(shù)取反得到反碼,,反碼加1得到補(bǔ)碼負(fù)數(shù)的補(bǔ)碼求原碼:補(bǔ)碼減1得到反碼,反碼的最高位不變,,其他位數(shù)取反得到原碼

需求:將十進(jìn)制的負(fù)整數(shù)-89轉(zhuǎn)換成二進(jìn)制補(bǔ)碼

實現(xiàn)步驟:

  1. 89的二進(jìn)制原碼是0101 1001(一個字節(jié))
  2. -89的二進(jìn)制原碼是1101 1001
  3. -89的二進(jìn)制反碼是1010 0110
  4. -89的二進(jìn)制補(bǔ)碼是1010 0111

因此通過以上的步驟計算機(jī)出來負(fù)整數(shù)-89轉(zhuǎn)換成二進(jìn)制的結(jié)果是1010 0111(一個字節(jié))

如何驗證這個結(jié)果是正確的,?

89+ -89=0

89的二進(jìn)制 0101 1001

-89的二進(jìn)制 1010 0111

相加的結(jié)果 1 0000 0000

這里的結(jié)果產(chǎn)生了高位溢出,最后的結(jié)果是0

還可以使用Windows的計算器驗證結(jié)果

這里的結(jié)果默認(rèn)是64位,,從右往左截取8位的結(jié)果就是1010 0111

驗證結(jié)果

9.3.2 負(fù)整數(shù)的二進(jìn)制轉(zhuǎn)換為十進(jìn)制

負(fù)整數(shù)的二進(jìn)制轉(zhuǎn)換為十進(jìn)制:根據(jù)補(bǔ)碼求原碼

負(fù)數(shù)的補(bǔ)碼求原碼:補(bǔ)碼減1得到反碼,,反碼的最高位不變,其他位數(shù)取反得到原碼

需求:將二進(jìn)制的負(fù)整數(shù)1010 0111轉(zhuǎn)換成十進(jìn)制

實現(xiàn)步驟:

  1. 先求反碼:補(bǔ)碼減1 1010 0111-1=1010 0110
  2. 再根據(jù)反碼求原碼:按位取反 1010 0110 按位取反的結(jié)果是 1101 1001
  3. 1101 1001轉(zhuǎn)換為十進(jìn)制的結(jié)果是-89
101 1001=1*2^0+1*2^3+1*2^4+1*2^5=1+8+16+64=89

10. 計算機(jī)字符編碼和字符集

10.1 計算機(jī)字符編碼

上面說到計算機(jī)底層只能識別二進(jìn)制,,而我們在計算機(jī)中看到的數(shù)字,、英文、中文等字符都是二進(jìn)制轉(zhuǎn)換之后的結(jié)果,。

按照某種規(guī)則將字符存儲到計算機(jī)中稱為編碼,,編碼的本質(zhì)就是將字符轉(zhuǎn)換為字節(jié)存儲,而反過來將存儲在計算機(jī)中的二進(jìn)制數(shù)按照某種規(guī)則解析顯示出來稱為解碼,,解碼的本質(zhì)就是將存儲的的字節(jié)轉(zhuǎn)換為字符,。

字符編碼(Character Encoding)就是一套自然語言的字符與二進(jìn)制數(shù)之間的對應(yīng)規(guī)則,例如ASCII字符編碼中 字符a對應(yīng)的二進(jìn)制是01100001,,轉(zhuǎn)換為十進(jìn)制就是97

如果編碼和解碼的規(guī)則一樣就不會出現(xiàn)亂碼

例如在Visual Studio Code中以UTF-8編碼保存一個文本文件,,然后通過GBK編碼打開時則會出現(xiàn)中文亂碼,而英文部分沒有亂碼的原因是因為GBK和UTF-8編碼處理英文的方式相同,。

10.2 計算機(jī)字符集

字符集(Charset)也叫作編碼表,,是一個系統(tǒng)支持的所有字符的集合,包括各個國家的文字,、標(biāo)點符號,、圖形符號,,數(shù)學(xué)符號、數(shù)字等等,。

計算機(jī)要準(zhǔn)確的存儲和識別各種字符集符號,,需要進(jìn)行字符編碼,一套字符集必然至少有一套字符集編碼,。常見字符集有ASCII字符集,、GBK字符集、Unicode字符集等,。

常用的字符集和字符編碼

從上圖可知當(dāng)指定了字符集編碼后,,它所對應(yīng)的字符集自然就指定了,因此字符集編碼才是我們真正應(yīng)該關(guān)心的,。

  • ASCII字符集 :
    ASCII(American Standard Code for Information Interchange,,美國信息交換標(biāo)準(zhǔn)代碼)是基于拉丁字母的一套電腦編碼系統(tǒng),用于顯示現(xiàn)代英語,,主要包括控制字符(回車鍵、退格,、換行鍵等)和可顯示字符(英文大小寫字符,、阿拉伯?dāng)?shù)字和西文符號)。
    基本的ASCII字符集,,使用7位(bits)表示一個字符,,共128字符。ASCII的擴(kuò)展字符集使用8位(bits)表示一個字符,,共256字符,,方便支持歐洲常用字符。
  • 中文字符集:

常用的中文字符集有GB2312,GBK,GB18030

GB2312:簡體中文碼表,。一個小于127的字符的意義與原來相同,。但兩個大于127的字符連在一起時,就表示一個漢字,,這樣大約可以組合了包含7000多個簡體漢字,,此外數(shù)學(xué)符號、羅馬希臘的字母,、日文的假名們都編進(jìn)去了,,連在ASCII里本來就有的數(shù)字、標(biāo)點,、字母都統(tǒng)統(tǒng)重新編了兩個字節(jié)長的編碼,,這就是常說的'全角'字符,而原來在127號以下的那些就叫'半角'字符了,。

GBK:最常用的中文碼表,。是在GB2312標(biāo)準(zhǔn)基礎(chǔ)上的擴(kuò)展規(guī)范,,使用了雙字節(jié)編碼方案,共收錄了21003個漢字,,完全兼容GB2312標(biāo)準(zhǔn),,同時支持繁體漢字以及日韓漢字等。

GB18030:最新的中文碼表,。收錄漢字70244個,,采用多字節(jié)編碼,每個字可以由1個,、2個或4個字節(jié)組成,。支持中國國內(nèi)少數(shù)民族的文字,同時支持繁體漢字以及日韓漢字等,。

  • ISO-8859-1字符集:
    拉丁碼表,,別名Latin-1,用于顯示歐洲使用的語言,,包括荷蘭,、丹麥、德語,、意大利語,、西班牙語等。
    ISO-8859-1使用單字節(jié)編碼,,兼容ASCII編碼,。
  • Unicode字符集 :
    Unicode編碼系統(tǒng)為表達(dá)任意語言的任意字符而設(shè)計,是業(yè)界的一種標(biāo)準(zhǔn),,也稱為統(tǒng)一碼,、標(biāo)準(zhǔn)萬國碼。

它最多使用4個字節(jié)的數(shù)字來表達(dá)每個字母,、符號,,或者文字。有三種編碼方案,,UTF-8,、UTF-16和UTF-32,最為常用的UTF-8編碼,。

UTF-8編碼,,可以用來表示Unicode標(biāo)準(zhǔn)中任何字符,它是電子郵件,、網(wǎng)頁及其他存儲或傳送文字的應(yīng)用中,,優(yōu)先采用的編碼?;ヂ?lián)網(wǎng)工程工作小組(IETF)要求所有互聯(lián)網(wǎng)協(xié)議都必須支持UTF-8編碼,。所以,,我們開發(fā)Web應(yīng)用,也要使用UTF-8編碼,。它使用一至四個字節(jié)(可變長度)為每個字符編碼,,編碼規(guī)則:

  • 128個US-ASCII字符,只需一個字節(jié)編碼,。
  • 拉丁文等字符,,需要二個字節(jié)編碼。
  • 大部分常用字(含中文),,使用三個字節(jié)編碼,。
  • 其他極少使用的Unicode輔助字符,使用四字節(jié)編碼,。

字符集規(guī)定了字符對應(yīng)存儲的二進(jìn)制數(shù),,字符集編碼規(guī)定了字符存儲時對應(yīng)占據(jù)的存儲空間。

同一段文本內(nèi)容,,使用不同的編碼存儲所占據(jù)的內(nèi)存大小也是不相同的

測試文本內(nèi)容

我是中國人 I am Chinese

使用UTF-8編碼保存時占據(jù)28個字節(jié)

UTF-8編碼文件大小

使用GBK編碼保存時占據(jù)23個字節(jié)

GBK編碼文件大小

因為中文內(nèi)容'我是中國人'使用GBK編碼保存時每個中文字符占據(jù)2個字節(jié),,而使用UTF-8編碼保存時每個中文占據(jù)3個字節(jié)

11.計算機(jī)語言發(fā)展史

11.1 什么是計算機(jī)語言

語言是人和人之間進(jìn)行溝通交流的一種表達(dá)方式,例如中國人和中國人之間使用漢語進(jìn)行交流,,中國人和美國人之間使用漢語或者是英語進(jìn)行交流,,溝通交流的前提就是要使用雙方都能夠理解的語言。

計算機(jī)語言也叫編程語言,,因為學(xué)習(xí)計算機(jī)語言的目的就是為了開發(fā)程序(編程)

計算機(jī)語言是人(程序員、開發(fā)者,、軟件工程師)和計算機(jī)之間進(jìn)行溝通交流的一種表達(dá)方式,,該語言有很多種,主流的語言有20多種,,我們學(xué)習(xí)Java開發(fā)時會學(xué)習(xí)Java,、SQL、JavaScript,、Scala等等

11.2 計算機(jī)語言發(fā)展史

任何事物都是從無到有逐漸發(fā)展壯大起來的,,計算機(jī)語言也是一樣的。

計算機(jī)語言經(jīng)歷了機(jī)器語言,、匯編語言,、高級語言(高級程序設(shè)計語言、高級編程語言)三個階段,,其特點就是讓程序的開發(fā),、測試、部署變得越來越高效,、簡單,、方便,。不過是以犧牲運(yùn)行效率(性能)為代價的,但是隨著計算機(jī)硬件的光速發(fā)展,,在絕大多數(shù)應(yīng)用場景下的性能損失可以忽略不計,。

  • 第一代編程語言 機(jī)器語言

計算機(jī)發(fā)展的早期,程序員采用二進(jìn)制(01010101)的機(jī)器指令來編寫程序,而每種CPU都有各自不同的指令系統(tǒng)(Ultra SPARC/Intel X86/ARM),這樣導(dǎo)致在不同的機(jī)器上同一套程序需要使用不同的機(jī)器語言,,機(jī)器語言的特點是運(yùn)行效率最高的,,不過面向機(jī)器編程的程序是不能移植的,需要手動處理底層硬件的差異性,,而且二進(jìn)制機(jī)器指令編寫的程序難以理解和維護(hù),。

  • 第二代編程語言 匯編語言

隨著時代和計算機(jī)技術(shù)的發(fā)展,后來就出現(xiàn)了匯編語言,,匯編語言和匯編器(編譯器)的出現(xiàn)解決了機(jī)器語言需要記住非常多的機(jī)器指令,,但是沒有從根本上解決程序的移植性問題,只是將機(jī)器語言的指令轉(zhuǎn)換成了人類更佳容易理解的英文單詞,然后由匯編器編譯成機(jī)器能夠識別的機(jī)器指令,,因為計算機(jī)最終只能夠識別二進(jìn)制的機(jī)器指令,,而且匯編語言是面向機(jī)器的,不同機(jī)器的匯編指令是不一樣的,。盡管如此匯編語言在工業(yè)電子編程,、軟件的加密解密以及計算機(jī)病毒分析等等場景使用。

  • 第三代編程語言 高級語言

高級語言的高級之處體現(xiàn)在開發(fā)人員在編寫程序的時候不需要關(guān)注計算機(jī)底層硬件的差異性,,只需要關(guān)注實現(xiàn)的業(yè)務(wù)模塊即可,。
高級語言需要通過編譯器編譯程序后執(zhí)行或者是解釋器邊解釋邊運(yùn)行,而且相比機(jī)器語言,、匯編語言而言,,高級語言更佳容易學(xué),因此會有更佳充足的人力資源來開發(fā)大型的商業(yè)系統(tǒng)(軟件),,例如Windows,、macOS、Linux,、Android,、iOS、鴻蒙OS等等操作系統(tǒng)都是使用C/C++以及少量的匯編實現(xiàn),,國內(nèi)的阿里巴巴在電商,、金融、物流,、支付 后臺等等領(lǐng)域大量使用了Java實現(xiàn)

高級語言按照編程思想分類分成面向過程和面向?qū)ο髢纱箢?,例如C語言就是面向過程的,Java、Python就是面向?qū)ο?br>高級語言按照運(yùn)行機(jī)制分成編譯型和解釋型兩類
C語言就是編譯型,,編譯型的語言通常不能跨平臺,,但是效率高于解釋型的語言。
Python就是解釋型的語言,,解釋型的語言都是可以跨平臺的,,但是效率比編譯型的語言要低

12. 計算機(jī)語言應(yīng)用場景

12.1 Tiobe編程語言排行榜和走勢

目前主流的編程語言有哪些?

我們可以訪問Tiobe編程排行榜查看當(dāng)前編程語言的排行榜

Tiobe編程語言排行榜
https://www./tiobe-index/

Tiobe編程語言排行版


目前(2022年7月份)Python,、C和Java排在前三名,,緊隨其后的是C++、JavaScript,、Go等等

Tiobe還提供了編程語言走勢圖,,從歷史趨勢可以看出Java和C語言是常年霸榜

12.2 主流編程語言應(yīng)用場景

每種編程語言都是自己擅長的應(yīng)用場景(開發(fā)方向),大家可以根據(jù)自己的喜好(市場需求)選擇對應(yīng)的編程語言,。

編程語言(高級語言)

應(yīng)用場景

C

硬件驅(qū)動,、操作系統(tǒng)(Linux)、中間件(Redis)

C++

應(yīng)用軟件(PhotoShop,、Office,、Chrome)、網(wǎng)絡(luò)通訊,、科學(xué)計算,、游戲

C#

Windows應(yīng)用、Web應(yīng)用,、游戲開發(fā)

Java

大型分布式系統(tǒng)(淘寶,、天貓、菜鳥物流,、順豐等等),、Android應(yīng)用、大數(shù)據(jù)開發(fā),、中間件(RocketMQ)

Go

云計算(Docker、Kubernates),、大數(shù)據(jù),、高并發(fā)

Kotlin

Android應(yīng)用開發(fā)

Swift

iOS應(yīng)用、iPadOS應(yīng)用,、macOS應(yīng)用

Python

機(jī)器學(xué)習(xí),、自動化運(yùn)維、自動化測試,、Web應(yīng)用,、爬蟲

JavaScript

瀏覽器端、服務(wù)端、PC桌面端

Scala

大數(shù)據(jù)

那么如果你作為一名初學(xué)者,,面對如此之多的編程語言,,到底從哪一門語言開始上車

如果你想要深入學(xué)習(xí)其他語言、框架,、中間件,、架構(gòu)的知識之前建議深入掌握J(rèn)ava,因為Java語言上手容易,、功能強(qiáng)大,,無論是中間件、大數(shù)據(jù),、大型分布式系統(tǒng),、Android App都可以使用Java開發(fā),目前在招聘市場中需求旺盛,,大家可以去招聘網(wǎng)站(Boss直聘,、拉勾)搜索了解詳細(xì)的招聘要求。

Java招聘要求

但是無論學(xué)習(xí)哪種編程語言,,都是實現(xiàn)目標(biāo)的工具,,而不是目標(biāo)本身。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多