负数的二进制编码——越是基础的越是要掌握 分类: 学习笔记2010-02-15 13:18330人阅读评论(0)收藏举报 原码就是原来的表示方法 反码是除符号位(最高位)外取反 补码=反码+1 以前学习二进制编码时,老师讲了一堆堆的什么原码啊反码啊补码啊 x x x x 转换啊,还有负数的表示方式啊 总是记不零清,终于从网上找到了一种比较好的讲解方式,保存再 s hare 一下,不过为了系统化讲解,又找来了一些编码的基础知识,如果只想看负数编码记忆法,请跳转到 1 .如果你不知道二进制怎么编码,请继续,否则请跳到2 1字节 = 8位,所以它能表示的最大数当然是8位都是1(既然2进制的数只能是0或1,如果是我们常见的10进制,那就8位都为9,这样说,你该懂了?) 1字节的二进制数中,最大的数: 11111111。 这个数的大小是多少呢?让我们来把它转换为十进制数。 无论是什么进制,都是左边是高位,右边是低位。10进制是我们非常习惯的计数方式,第一位代表有几个1(即几个100),第二位代表有几个10(即几个101),第三位代表有几个100(即有几个102)…,用小学课本上的说法就是:个位上的数表示几个1,十位上的数表示向个 10,百位上的数表示几个100…… 同理可证,二进制数则是:第1位数表示几个1 (20),第2位数表示几个2(21),第3位数表示几个4(22),第4位数表示向个8(23)…… 以前我们知道1个字节有8位,现在通过计算,我们又得知:1个字节可以表达的最大的数是255,也就是说表示0~255这256个数。 那么两个字节(双字节数)呢?双字节共16位。 1111111111111111,这个数并不大,但长得有点眼晕,从现在起,我们要学会这样来表达二制数: 1111 1111 1111 1111,即每4位隔一空格。 双字节数最大值为: 1 * 215 + 1 *214 + 1* 213 + 1 * 212 + 1 * 211 + 1 * 210 + …… + 1 * 22 + 1 * 21 + 1* 20 = 65535 很自然,我们可以想到,一种数据类型允许的最大值,和它的位数有关。具体的计算方法方法是,如果它有n 位,那么最大值就是: n 位二进制数的最大值:1 * 2(n-1) + 1 * 2(n-2) + ... + 1 * 20 2、理解有符号数和无符号数 负数在计算机中如何表示呢?这一点,你可能听过两种不同的回答。 一 种是教科书,它会告诉你:计算机用“补码”表示负数。可是有关“补码”的概念一说就得一节课,这一些我们需要在第6章中用一章的篇幅讲2进制的一切。再 者,用“补码...