做而论道_CS: 一个补码而已,并没有你写的这么麻烦。 你考虑一下进位,就迎刃而解了。 你看十进制,两位数就是:0~99。 随便算一个:27 + 99 = (一百) 26 这样也可以:27 - 1 = 26 如果你忽略进位,这两种算法,功能就是一样的。 只要你舍弃了进位,依然保持原有的位数: 正数,就能代替负数。 加法,就能完成减法运算。 在计算机中舍弃进位,计算机中: 就没有负数了,也没有了减法运算! 只需一个加法器,便可横行天下! 舍弃进位,才是补码的来源与存在意义。 两位十进制时,舍弃进位,就是减去一百。 那么,+99,再减 100,不就是 “-1 ”吗? 八位二进制是:0000 0000~1111 1111。 相当于十进制:0 ~ 255。 如果出现进位,就是:2^8 = 256。 此时,加上 255 (1111 1111),再舍弃进位 256, 显然就是 “-1” 了。 同理,1111 1110 (254),就是-2。 1111 1101 (253),就是-3。 。。。 负数的补码,就是:2^8 + 该负数。 正数,当然就还是正数,不用变换。 例:-31 的补码是多少? 求:256-31 = 225 = 1110 0001。 完事大吉! 根本就没有符号位原码反码取反加一什么事! 你看过【卖拐】吧? 计算机专家,比东北的老赵,更会【忽悠】! 它们编造了: 机器数真值符号位原棉反码补码正数三码相同负数取反加一符号位不变符号位也参加运算。。。 这就是一大批谎言哪! 进位,是小学二年级的知识点。 这就是补码的理论基础。 根本就用不着学什么原码反码。。。 谁要是跟老外学算术, 立刻,马上,直接,就掉沟里去了!
Linux Shell——-if -eq,if -ne,if -gt[笔记]
补码和原码的转化过程