关于程序员:unsigned-and-01

代数运算

对应 1003 + 1 =1004

D: 1003
B: 0011 1110 1011

0011 1110 1011 + 1 = 0011 1110 1100

也就是说同一个非负整数 在十进制和二进制都 有一个序列和它一一对应

  1. 数自身是一一对应的
  2. 运算也是一一对应的 +1 -1

也就是说加减法 在十进制和二进制是 等价的

溢出的问题

如果咱们规定一个序列只有两位

00   +01
01   +01
10   +01
11   +11  ?
这里该是多少呢?
如果咱们有3位
11
01
100
然而咱们这里 只有两位 发现最高位的1被吞掉了 这就是溢出
00

如果你的序列不是有限的 而是无限的 你就会发现 他的所有元素会造成一个环

    00
 11    01
    10

把n bit按每个块m bit的大小划分 能划分出$\frac{n}{m}$​​个块, 然而你想每一个地位都一一对应一个地址的话,也就是每一个块都能被找到的话

那必须是 $\frac{n}{m}$ <= 2^m

n = 8
m = 2      
2^m = 4   
n/m = 4

二进制就是模为2求余数的同余 过程

位与数字

把n bit按m bit的大小划分 能划分出$\frac{n}{m}$​个块, 然而你想每一个地位都一一对应一个地址的话,也就是每一个块都能被找到的话

那必须是 $\frac{n}{m}$ <= 2^m

同一个非负整数 10进制和2进制代表的意思是雷同 只是他们的表达形式不太

例如

13
D: 1x10^1 + 3x10^0
1101 
B: 1x2^3 + 1x2^2 + 0x2^1 + 1x2^0 

正数的解决 (补码)

比方我有m位

那么一个一半

2^m-1位非负整数 另外2^m-1表式正数

二进制符号构造 补码代数构造 十进制符号构造

这才是二的补码 就是定义在环上的代数运算

 取反加一
 比方
 001    1
 取反
 110    -2
+001    +1
 为什么这里不是-1?
 111    -3  这就是正数 -1的补码
 那么它的原码就是先减1
 110   反码
 符号位不变其余取反
 101     -1     这才是-1原码

溢出的点位产生了 180* 旋转

求一个负数所对应的正数

1   001
先取反
110
而后+1
111  这就是你求的那个数的补码

补码还原为原码的过程
先-1
110
而后处符号位取反
101   -1

反码:负数的反码就是其原码;正数的反码是将原码中,除符号位以外,每一位取反

补码:负数的补码就是其原码;正数的反码+1就是补码。

正数的原码 = 反码 取反 = 补码-1 取反

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理