| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4524 人关注过本帖
标题:有关整型数据在内存中的存放
只看楼主 加入收藏
az9841682
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:5
帖 子:312
专家分:596
注 册:2009-9-11
收藏
得分:0 
以下是引用JackyZhang在2010-10-25 22:17:18的发言:

32768 表示不出来,-32768怎么表示?最小的负数为什么是-32768,在内存中是如何存的。?麻烦给出答案?
数组存放
2010-10-25 23:16
我菜119
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:938
专家分:1756
注 册:2009-10-17
收藏
得分:0 
回复 5楼 gmac
-128不就是先将128的原码:1000 0000 取反:0111 1111 然后再加一:1000 0000,难道不是这个吗??怎么还不能够表示呢??怎么还能够表示不了呢???

愿用余生致力编程
2010-10-26 10:16
xiaomarn
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:348
专家分:2026
注 册:2009-3-18
收藏
得分:3 
旅行箱上的密码锁见过吧,就是一般由三个轮子组成,每个轮子上都有十个数(0-9),你必须跳到你设的密码才能打开,比如123,怎么做呢?第一个轮子调到1,第二个调到2,第三个调到3,ok,打开了。
这就是一种计数方法。
引申一下,想想,那个密码有八位,但是每个轮子只有2个数,0,1,同样表示一个数,我们可以用这个组合(0,1)表示。
这样我们只是计数的话,有它们就足够了
但是现在有了负数的概念了,再怎么计数呢?
一般我们把全是0的组合表示为0,(00000000),表示一呢?,右边第一个轮子滚个1(00000001),二呢?(00000010),(进位的概念知道吧)一直下去。。。。到了127(01111111),再走(+1),注意了,又有进位,怎么办?此时就要停下来,
由于我们是为了同时表示正数和负数,而8位二进制数只能表示256个数,很明显,正数和负数应该一样多,所以就有个规定:
最高位为1,则表示为负数,最高位为0就为正数,这样正数和负数就一样多了(其实负数多一个,0占了正数一个名额)
现在来看看负数的表示
+1是右一位滚1,-1呢?,大家都知道 -1=0-1,知道0的表示了(00000000)同样也右一位滚1,这时就要知道借位的概念了
最低位,减1,就像高位借,于是-1出来了(11111111),-2(11111110)(-2=-1-1)。。。。这样-127=10000001,
-128=10000000,-129再减1=01111111,额,不对怎么会等于+127,!
所以8位二进制(char)能表示(-128-127)
同理int(16位)表示(-65536-65535)
其实记住一个数加它的相反数是要等于0的(最基本的吧)
所以见到一个正数,知道它的二进制,要表示它的相反数就用0去减就行了,记住:负数的最该位为1
1+(-1)=0
00000001+11111111=00000000!

2010-10-26 11:06
JackyZhang
Rank: 2
等 级:论坛游民
帖 子:82
专家分:29
注 册:2010-7-12
收藏
得分:0 
回复 10楼 gmac
为什么不是1111 1111 1111 1111

初生牛犊,望多多照顾!
2010-10-26 11:20
gmac
Rank: 2
等 级:论坛游民
帖 子:174
专家分:85
注 册:2010-9-28
收藏
得分:2 
回复 14楼 JackyZhang
int 类型是有符号整数
ANSI C 规定int 类型最小范围是-32768到32767
既然是有符号型
要保留最高位来表示符号
例如位号为7 6 5 4 3 2 1 0,因此选择位7作为符号位
位7为1表示负号,0表示正号
负数用补码来表示。
当你看到最高位为1时,首先想着它是负数,然后把这个数减1,然后反转每一位,得到的是它的绝对值的二进制表示,然后再添个负号。
1111111111111111>1000000000000000>0000000000000001>1>-1
1000000000000000>0111111111111111>1000000000000000>32768>-32768
反之亦成立。。
若为unsigned int即无符号整数
1111111111111111就是65535最高位就不是符号位了。
这是基础知识,多看看书吧。我也是才学,回答你顺便复习下。哈哈哈哈。



[ 本帖最后由 gmac 于 2010-10-26 13:35 编辑 ]
2010-10-26 13:33
ycc892009
Rank: 2
等 级:论坛游民
帖 子:34
专家分:90
注 册:2009-12-23
收藏
得分:0 
1、我也对这个有点疑问,int 类型是4byte 32bit,范围-2^3到2^31-1,

2、而unsigned int 为0到2^31

1为什么不是2^32,是2^31为啥又要减一。unsigned就不用减一。

你们说它们在内存中石怎么存数的。int 的最大值可以是0xffffffff吗?

到达理想的界面是我的目标,成功却不是快捷方式!
2010-10-26 17:28
boycyc
Rank: 1
等 级:新手上路
帖 子:6
专家分:7
注 册:2010-10-26
收藏
得分:0 
正数的补码是他本身
负数的补码是他绝对值的反码加一!
2010-10-26 20:02
JackyZhang
Rank: 2
等 级:论坛游民
帖 子:82
专家分:29
注 册:2010-7-12
收藏
得分:0 
为什么不是:1111 1111 1111 1111

初生牛犊,望多多照顾!
2010-10-27 21:05
快速回复:有关整型数据在内存中的存放
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012282 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved