| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 798 人关注过本帖
标题:在程序中关于赋值的问题!
只看楼主 加入收藏
qhmzq
Rank: 1
等 级:新手上路
帖 子:21
专家分:6
注 册:2009-9-27
结帖率:100%
收藏
已结贴  问题点数:15 回复次数:3 
在程序中关于赋值的问题!
1.将一个负整数赋给一个无符号的变量,会得到什么结果,以及它们在内存中的表现形式是什么样子?
2.将一个大于32767的长整数赋给整形变量;会得到什么结果,以及它们在内存中的表现形式是什么样子?
3.将一个长整数赋给无符号变量,会得到什么结果,以及它们在内存中的表现形式是什么样子?

下面有一个程序例子,是我书上的题目。   请大家帮我解解,小弟在这先谢谢了,尤其是那个在内存中的表现形式不是很懂!!!


#include <stdio.h>
void main()
{int a,b;
 unsigned c,d;
 long e,f;
 a=100;
 b=-100;
 e=50000;
 f=32767;
 c=a;
 d=b;
 printf("%d,%d\n",a,b);
 printf("%u,%u\n",a,b);
 printf("%u,%u\n",c,d);
 c=a=e;
 d=b=f;
 printf("%d,%d\n",a,b);
 printf("%u,%u\n",c,d);
}
搜索更多相关主题的帖子: 赋值 
2009-10-01 14:28
m456m654
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:783
专家分:2806
注 册:2009-9-17
收藏
得分:6 
printf("%d,%d\n",a,b); //这句结果是显然的
printf("%u,%u\n",a,b);
printf("%u,%u\n",c,d);
第二句:将有符号的变为无符号的。a原来为100,其无符号数值也是100.b原来时-100,即1000 0000 0110 0100其补码为:
1111 1111 1001 1100,当这个补码表示的是一个无符号数时,它代表65436,所以输出65436.
对于第三句,我感觉其实质是和第二句一样的。只不过第二句是在输出的时候强制有符号的转换为无符号的,而第三局是用变量赋值的形式,先使有符号的a b赋给无符号的c d,然后直接输出无符号的c d。

[ 本帖最后由 m456m654 于 2009-10-1 15:08 编辑 ]
2009-10-01 15:05
m456m654
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:783
专家分:2806
注 册:2009-9-17
收藏
得分:6 
c=a=e;
d=b=f;
printf("%d,%d\n",a,b);
printf("%u,%u\n",c,d);
}
第一句:e原来是长整型,为50000,即0000 0000 0000 0000 1100 0011 0101 0000;将e的值赋给a,a只占两个字节,所以将e的第八位:1100 0011 0101 0000赋给a,所以a的补码就是:1100 0011 0101 0000;所对应的十进制数是-15536;所以a=-15536.
而b=f=32767,仍然在int型的取值范围之内,或者你也可以理解为将f的第八位给b,只不过给b以后换成十进制,还是32767,根本原因是数据没有溢出。
第二句:同样,无符号int型的范围是0到65535,而50000和32767都在这个范围内,也没有数据溢出,所以按原值输出。
2009-10-01 16:38
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
收藏
得分:3 
以下是引用m456m654在2009-10-1 15:05:24的发言:

printf("%d,%d\n",a,b); //这句结果是显然的
printf("%u,%u\n",a,b);
printf("%u,%u\n",c,d);
第二句:将有符号的变为无符号的。a原来为100,其无符号数值也是100.b原来时-100,即1000 0000 0110 0100其补码为:
1 ...
溢出了

欢迎来到我的博客:http://blog..cn/noisunyuhong
2009-10-01 17:15
快速回复:在程序中关于赋值的问题!
数据加载中...
 
   



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

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