黑马程序员技术交流社区

标题: 问一个很小的进制转换问题。。。 [打印本页]

作者: ☆枫の云    时间: 2014-4-3 09:27
标题: 问一个很小的进制转换问题。。。
本帖最后由 ☆枫の云 于 2014-4-3 12:55 编辑

准备参加黑马的课程了,无奈基础太差,只有从0开始学,今天碰到一个小问题,求指导~今天看到负数的2进制转换,毕老师说负数的最高位都是1,我毫不怀疑老师的说法,但是很纠结,虽然知道是最高位为0取反过来的,但是还有有点蒙。。。
刚用计算器换算过0111-1111 1111-1111 1111-1111 1111-1111的十进制是2147483647
算法应该是2^31-1=2147483647
为什么 1111-1111 1111-1111 1111-1111 1111-1111的十进制就是-1呢
为什么算法不是2^32-1呢。。。
求指导,虽然学习方法是有点钻牛角尖,不过还是好纠结。。。

作者: 闲人    时间: 2014-4-3 09:30
本帖最后由 闲人 于 2014-4-3 09:40 编辑

首先负数最好的计算方法是,补码取反+1,你把1111-1111 1111-1111 1111-1111 1111-1111
取反是0000-0000 0000-0000 0000-0000 0000-0000,
然后末尾加1 ,其实就是0001,十进制就是1了,
然后把符号带上,最前面一位是1就是负数
补:
第一位为符号位



作者: osully    时间: 2014-4-3 09:33
第一位是符号位 1就代表是负数 0就是正数

为什么 1111-1111 1111-1111 1111-1111 1111-1111的十进制就是-1呢
个人理解-1在负数中是最大的,所以全是1
作者: ☆枫の云    时间: 2014-4-3 09:37
闲人 发表于 2014-4-3 09:30
首先负数最好的计算方法是,补码取反+1,你把1111-1111 1111-1111 1111-1111 1111-1111
取反是0000-0000 00 ...

其实我想问为什么最高位是1就是负数=.=
作者: 759345779    时间: 2014-4-3 09:38
首先要明确数据在电脑中存储时以补码的形式存在的,整数的补码是和本来的数据是一样的,也就是说整数的补码就是其本身,0111-1111 1111-1111 1111-1111 1111-1111其原码和补码相同,所以你可以用2^31-1=2147483647来计算。而负数最高位为符号位,1表示负数,补码需要在原码的基础上取反加1,不包括符号位,从补码到原码也要取反加以。也就是说 1111-1111 1111-1111 1111-1111 1111-1111是补码存在的形式,转换时第一个1为符号不变,其他位取反加1就为1000-0000-0000-0000-0000-0000-0000-0001,转化为十进制就是-1.
作者: 闲人    时间: 2014-4-3 09:40
☆枫の云 发表于 2014-4-3 09:37
其实我想问为什么最高位是1就是负数=.=

因为第一位是符号位
作者: ☆枫の云    时间: 2014-4-3 09:40
osully 发表于 2014-4-3 09:33
第一位是符号位 1就代表是负数 0就是正数

为什么 1111-1111 1111-1111 1111-1111 1111-1111的十进制就是-1 ...

感觉也只能这么理解了,理解为符号位,谢了:handshake
作者: ☆枫の云    时间: 2014-4-3 09:42
闲人 发表于 2014-4-3 09:40
因为第一位是符号位

soga,谢谢
作者: ☆枫の云    时间: 2014-4-3 09:43
759345779 发表于 2014-4-3 09:38
首先要明确数据在电脑中存储时以补码的形式存在的,整数的补码是和本来的数据是一样的,也就是说整数的补码 ...

说得很详细啊=.=,谢谢
作者: 759345779    时间: 2014-4-3 10:14
☆枫の云 发表于 2014-4-3 09:37
其实我想问为什么最高位是1就是负数=.=

计算机规定计算机内部有符号数存储是用补码的,有符号数必须要有符号标志位,把第一位规定为符号位,是计算机规定,我们记住就行了。
作者: ☆枫の云    时间: 2014-4-3 12:49
759345779 发表于 2014-4-3 10:14
计算机规定计算机内部有符号数存储是用补码的,有符号数必须要有符号标志位,把第一位规定为符号位,是计 ...

哦哦,知道了,谢谢啦
作者: 请备注    时间: 2014-4-3 13:45
正数   取负数的方式是   取反  +1  ,
负数变正数 你可以反向操作就知道了。                                      1111  1111   1111         减1
也就是-1再取反。                                                             — 0000  0000   0001
                                                                                  —————————————
                                                                                          1111  1111   1110          取反
                                                                                          0000  0000   0001


                                                                                    
作者: 小班。    时间: 2014-4-3 13:46
最高位是符号位,最高位为0表示这个是一个整数,1表示是一个负数。这是规定。。。没有为什么。。这个不是原理,是知识点。
作者: ☆枫の云    时间: 2014-4-3 16:36
小班。 发表于 2014-4-3 13:46
最高位是符号位,最高位为0表示这个是一个整数,1表示是一个负数。这是规定。。。没有为什么。。这个不是原 ...

⊙﹏⊙b汗,好吧,感觉貌似大学的时候讲过的样子,又犯2了=.=
作者: 小班。    时间: 2014-4-3 16:51
☆枫の云 发表于 2014-4-3 16:36
⊙﹏⊙b汗,好吧,感觉貌似大学的时候讲过的样子,又犯2了=.=

呵呵。。。你可以多百度下。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2