wuzhengmin 发表于 2025-11-19 11:31:40

看看我自己的机器:

wuzhengmin 发表于 2025-11-19 11:33:47

仔细看数据区:


实际问题是出在变量定义......

肯定不是单片机不会加法...........

wuzhengmin 发表于 2025-11-19 11:37:16

下面看看数制转换:

wuzhengmin 发表于 2025-11-19 11:41:23

看看-1和正1的表示

wuzhengmin 发表于 2025-11-19 11:44:37

我们看看负数编码方案:

wuzhengmin 发表于 2025-11-19 11:46:49

1000 0000 表士-128,1111 1111 表示-1

符号幅度法有2个致命伤,1有2个0,2是从
+127到-0和从-127到+0不连续………

这2个缺陷太大,不好用!接着看补码法:

wuzhengmin 发表于 2025-11-19 11:49:12

补码表示法:

wuzhengmin 发表于 2025-11-19 11:49:46

1000 0000 表士-128,1111 1111 表示-1 (补码就是取反+1)正数范围是+0----+127,负数范围是-128-----负1。由于2N-1是奇数,(2N-1)/2个编码表示负整数,[(2^-1)/2]-1个编码表示正整数。显然,可以表示的负整数比正整数多一个。最大负整数的幅度要比最大正整数的幅度个数要多一个,好处是可以连续构成笛卡尔数轴,并且只有一个0。显然32位机器比8位,数的范围大很多。

wuzhengmin 发表于 2025-11-19 11:52:17

负整数补码的计算:

wuzhengmin 发表于 2025-11-19 11:53:14

注意特殊的点位:

-1的二进制数就是 1111 1111,有个特例是-128,因为+128已经溢出(超过8位二进制数正数0---127的范围),就规定-128的补码是10000000。理由如下:
8位二进制的原值表达范围为:-127至127,共有256个组合序列00000000至11111111。+128的原值在8位中是表达不出来的。下面从两个角度理解+128的补码为什么是10000000.(1)从补码的意义上去理解:因为:256-128=256+(-128)的补码–机器中只有加法。减法会变成补码的加法。而256-128=128,所以256+(-128)的补码=128,所以(-128)的补码=256-128=128,数学上,128=10000000,故规定-128的补码为10000000
页: 9 10 11 12 13 14 15 16 17 18 [19] 20 21 22 23 24 25 26 27 28
查看完整版本: 跟着何宾老师学习STC32位8051单片机原理及应用-STC32G12K128