CS61C | lecture1

CS61C | lecture1

计算机系统抽象

二进制可以表示任何东西

n 位数字(base B) 可以表示 <= B n B^n Bn 个事物

数字

计算机中,用二进制表示数字
$$
\begin{aligned}
& d_{n-1}d_{n-2}…d_1d_0(n位数字由B为基) \
=& ~~d_{n-1} \times B^{n-1} + d_{n-2} \times B^{n-2} + … d_1 \times B^1

  • d_0 \times B^0
    \end{aligned}
    $$

字符

26 个字符用 5 bits 可以表示
ASCII: 7 bits

布尔值

0 -> False
1 -> True

unsigned

x = 0 b 1010 = 2 3 + 2 1 = 10 \begin{aligned} x &= 0b1010 \\ & = 2^3 + 2^1 = 10 \end{aligned} x=0b1010=23+21=10

sign and magnitude

将第一位作为符号,剩下的作为无符号数。
0 0 0 t w o = + 0 t e n 0 0 1 t w o = + 1 t e n 0 1 0 t w o = + 2 t e n 0 1 1 t w o = + 3 t e n 1 0 0 t w o = − 0 t e n 1 0 1 t w o = − 1 t e n 1 1 0 t w o = − 2 t e n 1 1 1 t w o = − 3 t e n \begin{aligned} \textcolor{red}{0}00_{two} &= \textcolor{red}{+}0_{ten} \\ \textcolor{red}{0}01_{two} &= \textcolor{red}{+}1_{ten} \\ \textcolor{red}{0}10_{two} &= \textcolor{red}{+}2_{ten} \\ \textcolor{red}{0}11_{two} &= \textcolor{red}{+}3_{ten} \\ \\ \textcolor{blue}{1}00_{two} &= \textcolor{blue}{-}0_{ten} \\ \textcolor{blue}{1}01_{two} &= \textcolor{blue}{-}1_{ten} \\ \textcolor{blue}{1}10_{two} &= \textcolor{blue}{-}2_{ten} \\ \textcolor{blue}{1}11_{two} &= \textcolor{blue}{-}3_{ten} \\ \end{aligned} 000two001two010two011two100two101two110two111two=+0ten=+1ten=+2ten=+3ten=0ten=1ten=2ten=3ten
这样就会导致存在两个 0, 0... 0 t w o   a n d   10... 0 t w o = ± 0 t e n 0...0_{two}~and~10...0_{two} = \pm 0_{ten} 0...0two and 10...0two=±0ten
最大的正数 01... 1 t w o = ( 2 ( n − 1 ) − 1 ) t e n 01...1_{two}= (2^{(n-1)}-1)_{ten} 01...1two=(2(n1)1)ten
最小的负数 1... 1 t w o = − ( 2 ( n − 1 ) − 1 ) t e n 1...1_{two}=-(2^{(n-1)} - 1)_{ten} 1...1two=(2(n1)1)ten
x = 0 b 1010 = − 1 × 2 1 = − 2 \begin{aligned} x &= 0b1010 \\ & = -1 \times 2^1 = -2 \end{aligned} x=0b1010=1×21=2

biased notation

类似于 unsigned,但是会有偏移从而让 0 粗略的在中间。值 = “unsigned value” - bias
传统偏移量 ( 2 ( n − 1 ) − 1 ) (2^{(n-1)} - 1) (2(n1)1)
00 0 t w o = − 3 t e n 00 1 t w o = − 2 t e n 01 0 t w o = − 1 t e n 01 1 t w o = 0 t e n 10 0 t w o = + 1 t e n 10 1 t w o = + 2 t e n 11 0 t w o = + 3 t e n 11 1 t w o = + 4 t e n \begin{aligned} 000_{two} &= -3_{ten} \\ 001_{two} &= -2_{ten} \\ 010_{two} &= -1_{ten} \\ \textcolor{red}{011_{two}} &\textcolor{red}{= 0_{ten}} \\ 100_{two} &= +1_{ten} \\ 101_{two} &= +2_{ten} \\ 110_{two} &= +3_{ten} \\ 111_{two} &= +4_{ten} \\ \end{aligned} 000two001two010two011two100two101two110two111two=3ten=2ten=1ten=0ten=+1ten=+2ten=+3ten=+4ten
此时,0 为 01... 1 t w o = 0 t e n 01...1_{two}=0_{ten} 01...1two=0ten
最大的正数 1... 1 t w o = ( 2 ( n − 1 ) ) t e n 1...1_{two} = (2^{(n-1)})_{ten} 1...1two=(2(n1))ten
最小的负数 0... 0 t w o = − ( 2 ( n − 1 ) − 1 ) t e n 0...0_{two}=-(2^{(n-1)} - 1)_{ten} 0...0two=(2(n1)1)ten

x = 0 b 1010 = 2 3 + 2 1 − ( 2 3 − 1 ) = 3 \begin{aligned} x &= 0b1010 \\ & = 2^3 + 2^1 - (2^3 - 1) = 3 \end{aligned} x=0b1010=23+21(231)=3

one’s complement

00 0 t w o = + 0 t e n 00 1 t w o = + 1 t e n 01 0 t w o = + 2 t e n 01 1 t w o = + 3 t e n 10 0 t w o = − 3 t e n 10 1 t w o = − 2 t e n 11 0 t w o = − 1 t e n 11 1 t w o = − 0 t e n \begin{aligned} 000_{two} &= +0_{ten} \\ 001_{two} &= +1_{ten} \\ 010_{two} &= +2_{ten} \\ 011_{two} &= +3_{ten} \\ \\ 100_{two} &= -3_{ten} \\ 101_{two} &= -2_{ten} \\ 110_{two} &= -1_{ten} \\ 111_{two} &= -0_{ten} \\ \end{aligned} 000two001two010two011two100two101two110two111two=+0ten=+1ten=+2ten=+3ten=3ten=2ten=1ten=0ten
然而此时 0 有两个 0... 0 t w o   a n d   1... 1 t w o = ± 0 t e n 0...0_{two}~and~1...1_{two} = \pm0_{ten} 0...0two and 1...1two=±0ten
最大的正数 01... 1 t w o = ( 2 ( n − 1 ) − 1 ) t e n 01...1_{two} = (2^{(n-1)}-1)_{ten} 01...1two=(2(n1)1)ten
最小的负数 10... 0 t w o = − ( 2 ( n − 1 ) − 1 ) t e n 10...0_{two} = -(2^{(n-1)}-1)_{ten} 10...0two=(2(n1)1)ten
x = 0 b 1010 − x = ∼ x = 0 b 0101 = 5 x = − 5 \begin{aligned} x &= 0b1010 \\ -x& = \sim x = 0b0101 = 5 \\ x &= -5 \end{aligned} xxx=0b1010=∼x=0b0101=5=5

two’s complement

00 0 t w o = + 0 t e n 00 1 t w o = + 1 t e n 01 0 t w o = + 2 t e n 01 1 t w o = + 3 t e n 10 0 t w o = − 4 t e n 10 1 t w o = − 3 t e n 11 0 t w o = − 2 t e n 11 1 t w o = − 1 t e n \begin{aligned} 000_{two} &= +0_{ten} \\ 001_{two} &= +1_{ten} \\ 010_{two} &= +2_{ten} \\ 011_{two} &= +3_{ten} \\ \\ 100_{two} &= -4_{ten} \\ 101_{two} &= -3_{ten} \\ 110_{two} &= -2_{ten} \\ 111_{two} &= -1_{ten} \\ \end{aligned} 000two001two010two011two100two101two110two111two=+0ten=+1ten=+2ten=+3ten=4ten=3ten=2ten=1ten
对于 0,只有 0... 0 t w o = 0 t e n 0...0_{two} = 0_{ten} 0...0two=0ten
最大的正数 01... 1 t w o = ( 2 ( n − 1 ) − 1 ) t e n 01...1_{two} = (2^{(n-1)} - 1)_{ten} 01...1two=(2(n1)1)ten
最小的负数 10... 0 t w o = ( − 2 ( n − 1 ) ) t e n 10...0_{two}=(-2^{(n-1)})_{ten} 10...0two=(2(n1))ten

正数翻转所有位并加 1 可以得到负数。

x = 0 b 1010 − x = ∼ x + 1 = 0 b 0101 + 1 = 0 b 0110 = 6 x = − 6 = − 2 3 + 2 1 = − 8 + 2 = − 6 \begin{aligned} x &= 0b1010 \\ -x& = \sim x + 1= 0b0101 + 1 = 0b0110 = 6 \\ x & = -6 \\ & = -2^3 + 2^1 = -8 + 2 = -6 \end{aligned} xxx=0b1010=∼x+1=0b0101+1=0b0110=6=6=23+21=8+2=6

对于补码来说

会溢出不会溢出
+ + +- + +
- + -+ + -
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值