二進位制 (小白進軍程式設計師)
1.人為什麼使用十進位制?
人有10個手指頭。
2.計算機為什麼用二進位制?
因為CPU的引腳是為了通電用的。有時候是高電頻,有的是低電頻。為了區分,就用0和1表示,0表示低點頻。1表示高點頻。
二進位制就是馮2進1. 十進位制就是馮10進1.
3.十進位制和二進位制表數的共通點就是基數(radix)
十進位制的基數為10 二進位制的基數為2
4.二進位制和十進位制的轉換
口訣 基數 * 位次冪+
比如0101 轉為十進位制
0101 = 1 * 2的零次方 + 0* 2的一次方 + 1* 2的2次方 + 0 * 2的3次方 =5
所以0101轉為十進位制就是5
其餘進位制轉為十進位制都是如此。
比如五進位制 43 轉為十進位制。
43 = 3 * 5的一次方 + 4* 5的1次方=23.
5.八進位制
前面通常用加0 比如047
6.十六進位制
0-9ABCDEF 通常用0X為字首,表示十六進位制
- 十進位制轉二進位制 (除2求餘數法)
8.二進位制的正數和負數
原碼:就是二進位制碼。比如十進位制的7的原碼就是00000111
反碼:將原碼中的0變為1,1變為0. 7的反碼就是11111000.
補碼:反碼 + 1 7的補碼就是:11111001
負數用補碼錶示。
正數用原碼錶示。
最高位如果是1表示負數。
十進位制的負數轉二進位制,先求解對應正數的原碼,然後最高位定為1,其餘位取反然後加1
二進位制負數轉十進位制,符號位不變,其餘位取反然後加1,得到原碼。
比如11000100轉十進位制
其餘位取反 0111011
加1得到0111100 這是原碼 即為60
負數就是-60 (這裡可以用十進位制的負數轉二進位制反驗證)
8位二進位制的範圍:
既然說是範圍,那肯定是要bai帶符號位的了,最du高位分別zhi用0,1表示正負數,其餘各位均為1,即為8位二進位制原碼錶示的範圍,即
但若是補碼就不是這個範圍了,應該是-128~+127,計算原理相同,只是數的表示方法不同,有興趣自己可以計算一下。
結論:
8位二進位制原碼的bai表示範du圍:-127~+127
8位二進位制反碼的表示zhi範圍dao:-127~+127
8位二zhuan進位制補碼的表示範圍:-128~+127
n位二進位制原碼和n位二進位制反碼:-2(n-1)-1~+2(n-1)-1;n位二進位制補碼:-2(n-1)~+2(n-1)-1。
9.為什麼負數用補碼錶示?
原因一:為了讓0的表述實現統一
00000000 這是0
它的反碼11111111
它的補碼:100000000 這是九位數了,溢位了,溢位忽略,所以補碼為00000000
因為0沒有正負數,所以補碼要和原碼一樣。所以用補碼錶示負數。
原因二:減法可以當做加法運算
CPU沒有減法器。所以用補碼錶示負數CPU就可以計算了。
10.二進位制的邏輯運算
& 遇0則0 與運算
| 遇1就1 或運算
~ 1-0 0-1 取反
^ 相加不進位(相同為0,相異為1) 異或
補符號位 (將最右位幹掉,高位正數左補0,負數左補1)右移
<< 補0 (最高位幹掉,在最右位補0) 左移無論高位是啥直接補0 無符號右移
11.移位運算與乘除運算的關係
對於右移,直觀的理解為,對於正數來說,右1移相當於除以2(但效率比除法高);對於負數來說,沒有直觀的理解。
對於左移,直觀的理解為,對於正數來說,左移相當於乘以2(但效率比乘法高);對於負數來說,沒有直觀的理解。
12.a=3 b=4 a和b交換。
方法一:用臨時變數c
方法二:a=a^b b=a^b a=a^b
13.長整數和短整數的轉換
比如01101101 轉為十六位----00000000 01101101
比如11000110 這是負數轉為十六位 ---- 11111111 11000110
短整數轉長整數 數字大小不會變
長整數轉短整數 是將高位砍掉,這樣會數字會發生變化。
14單位:
bit 1位
byte 8位 CPU在設計的時候最低就是8位數,如果不夠自動高位補0.
MB
GB
TB
15.LITTLE ENDIAN/BIG ENDIAN(小端/大端)
超過一個位元組的數在記憶體中的儲存順序
地位在小地址-little endian
高位在小地址-big endian
相關文章
- 計算機基礎進位制轉換(二進位制、八進位制、十進位制、十六進位制)計算機
- [計算機基礎] 計算機進位制轉換:二進位制、八進位制、十進位制、十六進位制計算機
- 程式設計師需要了解的硬核知識之二進位制程式設計師
- 進位制詳解:二進位制、八進位制和十六進位制
- JavaScript 二進位制、八進位制與十六進位制JavaScript
- 二進位制與二進位制運算
- 二進位制,八進位制,十進位制,十六進位制的相互轉換
- 【進位制轉換】二進位制、十六進位制、十進位制、八進位制對應關係
- 十進位制——二 (八、十六 )進位制
- JAVA 二進位制,八進位制,十六進位制,十進位制間進行相互轉換Java
- java中二進位制、八進位制、十進位制、十六進位制的轉換Java
- 二進位制,八進位制,十進位制,十六進位制之間的轉換
- 二進位制、十進位制與十六進位制相互轉化
- 二進位制
- (二進位制)
- 設計一個十進位制轉化為隨意進位制的程式
- 二進位制轉十進位制快速方法
- 什麼是二進位制?二進位制如何轉換?
- 進位制之間的轉換之“十六進位制 轉 十進位制 轉 二進位制 方案”
- 一看就懂二進位制、八進位制、十六進位制數轉換十進位制
- JavaScript十進位制轉換為二進位制JavaScript
- 十進位制轉二進位制推導(草稿)
- Cocoapods 二進位制
- 04 二進位制
- leetcode -- 二進位制LeetCode
- 整數轉化成八進位制、十六進位制、二進位制,以及轉回
- 進位制與二進位制及相關轉換
- 計算機中的二進位制計算機
- 二進位制陣列陣列
- 二進位制或序列
- 遞迴函式實現十進位制正整數轉換為二進位制,八進位制,十六進位制遞迴函式
- 3416:【例72.1】 二進位制轉化為十進位制
- 教你如何進行數倉字串、二進位制、十六進位制互轉字串
- 尤拉計劃711:二進位制黑板
- JavaScript 八進位制與二進位制表示法JavaScript
- JavaScript八進位制與二進位制表示法JavaScript
- java二進位制運算十進位制(精確運算)Java
- Python 十進位制轉換為二進位制 高位補零Python