| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1920 人关注过本帖
标题:[求助]关于整形int在内存中的是如何保存的?
只看楼主 加入收藏
zgwxwn
Rank: 1
等 级:新手上路
帖 子:83
专家分:0
注 册:2006-4-24
收藏
 问题点数:0 回复次数:12 
[求助]关于整形int在内存中的是如何保存的?

有这么一个题:
main()
{ int a=-521;
printf("%u",a);
}
运行的结果是65015。答案分析说-521在内存中保存为1111 1101 1111 0111,将这个二进制转化为无符号整数刚好就是65015。
我想问的是红字的部分怎么解释?请高手指点!!

I need your help!!!
搜索更多相关主题的帖子: 内存 int 整形 保存 
2006-05-19 12:39
zinking
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:35
帖 子:916
专家分:0
注 册:2004-12-5
收藏
得分:0 
呵呵,内存里都是0和1
%u是什么格式的呵呵不是二进制吧

http://kongfuziandlife. http://codeanddesign.
2006-05-19 12:53
SunShining
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:31
帖 子:2215
专家分:0
注 册:2006-2-17
收藏
得分:0 
%u是无符号 unsigned的输出格式..

这种题去看看数据类型就会懂的..不难理解!

[glow=255,violet,2]闭关修炼ing...[/glow] [FLASH=360,180]http://www./chinaren.swf[/FLASH]
2006-05-19 13:09
zgwxwn
Rank: 1
等 级:新手上路
帖 子:83
专家分:0
注 册:2006-4-24
收藏
得分:0 

我想知道的是-5121111 1101 1111 0111是怎么互相转换的 是原码?补码?还是……


coding & enjoying
2006-05-19 13:15
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
收藏
得分:0 
回复:(zgwxwn)[求助]关于整形int在内存中的是如何保...
以下是引用zgwxwn在2006-5-19 12:39:00的发言:

有这么一个题:
main()
{ int a=-521;
printf("%u",a);
}
运行的结果是65015。答案分析说-521在内存中保存为1111 1101 1111 0111,将这个二进制转化为无符号整数刚好就是65015。
我想问的是红字的部分怎么解释?请高手指点!!

I need your help!!!

<计算机基础>指出,对于16位即short int,
-521在内存中保存为1111 1101 1111 0111
这是“补码”表示法所决定的。最左边那个1
代表“负号”。记忆的方法是:
对于 short int 而言
无符号数与带符号数在 0~32767 范围内表达方式是完全一样的。
然而,带符号数 -32768~-1的表达方式
竟然与无符号数 32768~65535 对应相同
于是发现下列公式:
负整数的补码=(该数+65536)的无符号表示


落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-05-19 13:20
工藤♀新一
Rank: 1
等 级:新手上路
帖 子:140
专家分:0
注 册:2006-5-4
收藏
得分:0 
负数的话在内存中为第一位为1不变 然后其他位取反加1
1111 1101 1111 0111转化为十进制的话保持第一位不变然后先减1再其他位取反
1111 1101 1111 0110
1000 0010 0000 1001
=-(1+8+512)=-521

很高兴能和大家一起学习程序! QQ:114109098
2006-05-19 13:45
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 
以下是引用zgwxwn在2006-5-19 12:39:00的发言:

有这么一个题:
main()
{ int a=-521;
printf("%u",a);
}
运行的结果是65015。答案分析说-521在内存中保存为1111 1101 1111 0111,将这个二进制转化为无符号整数刚好就是65015。
我想问的是红字的部分怎么解释?请高手指点!!

I need your help!!!

int 类型整数在计算机内部存储为:最高位是符号位:0表示正,1表示负;
负数以补码形式存储

521=512+8+1
512的原码为:00 00 00 10 00 00 10 01
取反码为:   11 11 11 01 11 11 01 10
-512的补码为: 11 11 11 01 11 11 01 11

对不礼貌的女生收钱......
2006-05-19 16:04
SunShining
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:31
帖 子:2215
专家分:0
注 册:2006-2-17
收藏
得分:0 
以下是引用工藤♀新一在2006-5-19 13:45:00的发言:
负数的话在内存中为第一位为1不变 然后其他位取反加1
1111 1101 1111 0111转化为十进制的话保持第一位不变然后先减1再其他位取反
1111 1101 1111 0110
1000 0010 0000 1001
=-(1+8+512)=-521

....10 0000 0000 是512
1000 是 8
1 是 1
相加就是521 诶..这个算法不错..我以前怎么没见到过..到现在我还用乘的呢~
那 10进制 变回2进制是不是 也这么变啊..?
求教..求教....


[glow=255,violet,2]闭关修炼ing...[/glow] [FLASH=360,180]http://www./chinaren.swf[/FLASH]
2006-05-19 17:09
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 
....不是
二进制的每三位为一个8进制数
二进制的每四位为一个16进制数

比如
00010010 = [0001] [0010] = 12H
00010010 = [000][010][010] = 022 (8进制)

淘宝杜琨
2006-05-19 17:18
SunShining
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:31
帖 子:2215
专家分:0
注 册:2006-2-17
收藏
得分:0 
8进制.和16进制 是3位 与 4位 我知道的.

那10进制呢..我现在 10进制变2进制 还用除呢.

看他上面的算法..好象也应该有个简单点的方法吧..

神..快教教我..

[此贴子已经被作者于2006-5-19 17:21:29编辑过]


[glow=255,violet,2]闭关修炼ing...[/glow] [FLASH=360,180]http://www./chinaren.swf[/FLASH]
2006-05-19 17:21
快速回复:[求助]关于整形int在内存中的是如何保存的?
数据加载中...
 
   



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

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