A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ☆枫の云 金牌黑马   /  2014-4-3 09:27  /  1338 人查看  /  14 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 ☆枫の云 于 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呢。。。
求指导,虽然学习方法是有点钻牛角尖,不过还是好纠结。。。

评分

参与人数 1技术分 +1 收起 理由
itpower + 1

查看全部评分

14 个回复

正序浏览
☆枫の云 发表于 2014-4-3 16:36
⊙﹏⊙b汗,好吧,感觉貌似大学的时候讲过的样子,又犯2了=.=

呵呵。。。你可以多百度下。。
回复 使用道具 举报
小班。 发表于 2014-4-3 13:46
最高位是符号位,最高位为0表示这个是一个整数,1表示是一个负数。这是规定。。。没有为什么。。这个不是原 ...

⊙﹏⊙b汗,好吧,感觉貌似大学的时候讲过的样子,又犯2了=.=
回复 使用道具 举报
最高位是符号位,最高位为0表示这个是一个整数,1表示是一个负数。这是规定。。。没有为什么。。这个不是原理,是知识点。
回复 使用道具 举报
正数   取负数的方式是   取反  +1  ,
负数变正数 你可以反向操作就知道了。                                      1111  1111   1111         减1
也就是-1再取反。                                                             — 0000  0000   0001
                                                                                  —————————————
                                                                                          1111  1111   1110          取反
                                                                                          0000  0000   0001


                                                                                    
回复 使用道具 举报
759345779 发表于 2014-4-3 10:14
计算机规定计算机内部有符号数存储是用补码的,有符号数必须要有符号标志位,把第一位规定为符号位,是计 ...

哦哦,知道了,谢谢啦
回复 使用道具 举报
☆枫の云 发表于 2014-4-3 09:37
其实我想问为什么最高位是1就是负数=.=

计算机规定计算机内部有符号数存储是用补码的,有符号数必须要有符号标志位,把第一位规定为符号位,是计算机规定,我们记住就行了。
回复 使用道具 举报
759345779 发表于 2014-4-3 09:38
首先要明确数据在电脑中存储时以补码的形式存在的,整数的补码是和本来的数据是一样的,也就是说整数的补码 ...

说得很详细啊=.=,谢谢
回复 使用道具 举报
闲人 发表于 2014-4-3 09:40
因为第一位是符号位

soga,谢谢
回复 使用道具 举报
osully 发表于 2014-4-3 09:33
第一位是符号位 1就代表是负数 0就是正数

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

感觉也只能这么理解了,理解为符号位,谢了:handshake
回复 使用道具 举报
☆枫の云 发表于 2014-4-3 09:37
其实我想问为什么最高位是1就是负数=.=

因为第一位是符号位
回复 使用道具 举报
首先要明确数据在电脑中存储时以补码的形式存在的,整数的补码是和本来的数据是一样的,也就是说整数的补码就是其本身,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.

评分

参与人数 1技术分 +1 收起 理由
itpower + 1

查看全部评分

回复 使用道具 举报
闲人 发表于 2014-4-3 09:30
首先负数最好的计算方法是,补码取反+1,你把1111-1111 1111-1111 1111-1111 1111-1111
取反是0000-0000 00 ...

其实我想问为什么最高位是1就是负数=.=
回复 使用道具 举报
第一位是符号位 1就代表是负数 0就是正数

为什么 1111-1111 1111-1111 1111-1111 1111-1111的十进制就是-1呢
个人理解-1在负数中是最大的,所以全是1
回复 使用道具 举报
本帖最后由 闲人 于 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就是负数
补:
第一位为符号位


评分

参与人数 1技术分 +1 收起 理由
itpower + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马