发布网友 发布时间:2023-08-03 00:26
共2个回答
热心网友 时间:2024-12-12 08:59
对于补码多数人都是大学里面深深印在脑子里的一句话"正数的补码是其本身,负数的补码是符号位不动,其余位按位取反加1",对于这句话当时并没有想太多,理性对自己的感性说"就是这么规定的,不要多想了".后来看书又接触到了补码,不禁想想这句话和补码的原始定义究竟如何贯通呢?
人产生了疑惑,觉着不通透,根本是感性和理性不能贯通了,前面关于求出负数补码是一种感性理解,当遇到了真正数学对于补码的定义,二者不能互相融会贯通,就不爽了,那么下面看一下补码的数学定义.
既然这个公式和上面的那句话都可以得出负数补码,那么二者究竟是怎么贯通在一起的呢?理解了这个问题就打通了感性与理性,心中对补码的疑惑也就不存在了,学知识还是尽量到达这个程度比较好.
通俗(感性认知)理解补码:例如,-1的补码怎么样才能在算数的时候产生他的意义呢,-1+1必须等于0,那么-1的补码才有意义,或者说得到补码之后,-1+1的结果不能改变,那么看看-1的补码1111,加上0001得到10000,只看四位,那么就是0了,显然如此的完美,当然用上面的公式做出普遍意义的证明是比较容易的,大家可以试试.
-1为例,先看按位取反加1的过程,1001,符号位不动,按位取反得到1110,加1,也就是1111,这是-1的补码,分步来看,其实,先不看符号位,按位取反也就是0110,这相当于0111-0001 然后加1,0111+0001=1000,所以也就是1000-0001 = 0111,再加上符号位的1就得到了1111这个补码,换句话说也就是-8+7 = -1,那么看看补码数学定义的公式,也就是负权位的1与0111之和.
所以按位取反加1这种方法就是这个公式的规律性用法,为什么这么说呢?这里的取值范围是-8到正7,那么以正8为"镜子",也就是1000,想求-1的补码,那么就1000-0001得到与1互补的正数,然后加上负权位,自然就得到了-1,进一步通俗的理解就是,按位取反就是+1就是为了拿1000这个镜子去映射出"能够和负权位相加得到 当前负数绝对值所对应负数的 正数,类似于互补角,或者说成:是为了得到此负数绝对值,在此区间的互补数",所以说按位取反+1这种方式就是在变相的用公式得出结果,本质还是公式的定义.个人觉得这个办法反而让人产生疑惑,因为没有给出原理,只是告诉了方法.
应该说理解了按位取反+1就是公式的方便记忆和使用,本质还是公式的唯一性且一一对应,那么也可以理解为啥正数的补码是其本身了,因为正数最高权位是0,根本没有变化,现在想想还是从数学的角度去认知类似事物比较好,没什么可模糊疑惑纠缠的.
关键的地方在于按位取反+1就是得到了,此负数绝对值,在此区间的互补数,然后加上负权位.
热心网友 时间:2024-12-12 09:00
如果上过小学,就知道什么是“进位”。
如果忽略进位,会如何?
你就看十进制数吧,两位:0 ~ 99。
随便算一个:27 + 99 = (一百) 26
你也可以这么算:27 - 1 = 26
你一定能看出:忽略了进位,这两种算法,就是等效的。
如果在计算机中,舍弃进位呢?
--负数和减法,就都没有了,都被正数和加法,代替了。
--此时,计算机只需配置一个加法器,便可横行天下!
由此可知,舍弃进位,才是“补码”的来源和存在意义。
.
八位二进制数是:0000 0000 ~ 1111 1111。
相当于十进制数:0 ~ 255。
出现进位,就是:2^8 = 256。
.
那么,加上 255 (1111 1111),再舍弃进位,就是-1!
同理,254 (1111 1110),就能当-2 使用。
。。。 。。。
以上这些正数(128 ~ 255),就是“计算机专家发明的补码”了。
而加上 0 ~ 127,不会产生进位。所以,它们,就只能当正数使用了。
.
其实,所谓的“补码”,也还是常规的数字而已!
根本就算不上:什么什么码。
之所以弄的如此神秘,就是被计算机专家给忽悠了。
.
透彻理解补码,并不是什么难事。
进位、舍弃进位,这有什么难以理解的?
但是,老外,就弄不懂了。
百般无奈,就编造了:机器数符号位原码反码补码正数三码相同负数取反加一符号位不变模符号位也参加计算时针倒拨正拨同余。。。
谁要是跟老外学算术,立刻、马上、直接,就掉沟里去了