| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 611 人关注过本帖, 1 人收藏
标题:关于unsigned的一个问题?
只看楼主 加入收藏
xxfiles
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2008-10-14
收藏(1)
 问题点数:0 回复次数:10 
关于unsigned的一个问题?
main()
{int a,b,c,d;
unsigned int u;
a=12;b=-24;u=-10;
c=a+u;d=b+u;
printf("a+u=%d,b+u=%d\n",c,d);
}

结果是a+u=2,b+u=-34,因已定义"unsigned int u",为何当u=-10还能有结果?不是应该出错吗?
2011-04-21 22:53
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
对于 c
变量只会保存一个 2 进制数字,而且这个二进制数是没有符号的。
在对变量赋值或进行自增、自减这种会改变变量的值的运算时,所进行的也全部都是无符号的二进制运算,并不会检测被赋予变量的值有没有符号
在使用 printf() 输出一个变量的值时,printf 会根据格式字符串,也就是 "%d...." 这个东西来决定如何呈现变量的值。
你的 printf() 里用"%d", 表示将变量 c 和 d 转换为有符号 10 进制整数,所以最后输出的结果就带有符号,而且是正确的结果。
2011-04-21 23:13
kami_dante
Rank: 2
等 级:论坛游民
帖 子:37
专家分:93
注 册:2010-12-29
收藏
得分:0 
有个地方不明白 你说“在对变量赋值或进行自增、自减这种会改变变量的值的运算时,所进行的也全部都是无符号的二进制运算”
c=a+u;   没有符号怎么实现相减?
2011-04-21 23:36
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
a = 12      // a     = 00000000 00000000 00000000 00001100 (base2)
u = - 10    // u     = 11111111 11111111 11111111 11110110 (base2)
            // a + u = 00000000 00000000 00000000 00000010 (base2) == 2 (base10)

明白了?
2011-04-21 23:49
kami_dante
Rank: 2
等 级:论坛游民
帖 子:37
专家分:93
注 册:2010-12-29
收藏
得分:0 
    明白
2011-04-22 00:20
zjl01223
Rank: 2
等 级:论坛游民
帖 子:42
专家分:90
注 册:2011-4-21
收藏
得分:0 
学习了
2011-04-22 00:22
hnuhsg1226
Rank: 9Rank: 9Rank: 9
来 自:中国
等 级:蜘蛛侠
威 望:2
帖 子:314
专家分:1314
注 册:2011-3-27
收藏
得分:0 
学习学习

我的地盘
2011-04-22 08:13
hjywyj
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:1114
专家分:2611
注 册:2010-4-14
收藏
得分:0 
不同的编译器不同的结果,VC中是2,但是dev c++中,此程序不通过。有错误
2011-04-22 08:25
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
回复 8楼 hjywyj
不能够。我的 gcc 就能编,你的 dev-c++ 没理由编不了。

除非你没加 #include <stdio.h>
2011-04-22 10:12
yue_shen_vs
Rank: 2
等 级:论坛游民
帖 子:19
专家分:37
注 册:2011-4-22
收藏
得分:0 
四楼说到本意上了,顶啊。。
2011-04-22 10:45
快速回复:关于unsigned的一个问题?
数据加载中...
 
   



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

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