一个条件表达式的值

xz0404 2011-02-08 02:02:23
if( 0 - sizeof(int) > 0){};
求GCC 的结果.
...全文
229 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
harleypang 2011-02-16
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 infidel 的回复:]
引用 2 楼 loaden 的回复:

sizeof返回一个unsigned int,所以0 - sizeof(int)相当于4294967292。
结果为true。

如果强制转换一下,就是false了。
0 - (int)sizeof(int) > 0

长见识了...
[/Quote]

=============
确实长见识了!!
jaylong35 2011-02-09
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 loaden 的回复:]
sizeof返回一个unsigned int,所以0 - sizeof(int)相当于4294967292。
结果为true。

如果强制转换一下,就是false了。
0 - (int)sizeof(int) > 0
[/Quote]
学习了
qq120848369 2011-02-09
  • 打赏
  • 举报
回复
有符号数与无符号数运算,向无符号数转化.

0-4=0+(-4)=0x00 00 00 00 + 0xff ff ff f4=0xff ff ff fc = 无符号十进制:4294967292。

运算过程与有符号数没区别,只是最终当做无符号数转化成十进制,效果就出来了.
Roy T 2011-02-09
  • 打赏
  • 举报
回复
C++真是太伟大/可怕了。。。
Al_Ways 2011-02-08
  • 打赏
  • 举报
回复
sizeof(int)不是为4么??
Al_Ways 2011-02-08
  • 打赏
  • 举报
回复
不懂..sizeof不是用来求类型大小的么??请高手再解释详细一点..
本人初学.
zenny_chen 2011-02-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 loaden 的回复:]

sizeof返回一个unsigned int,所以0 - sizeof(int)相当于4294967292。
结果为true。

如果强制转换一下,就是false了。
0 - (int)sizeof(int) > 0
[/Quote]
哈哈,老邓回答得不错啊。
这个东西确实很容易失误。话说俺前一个项目,在做动态存储管理时俺也碰到过,在一个表达式里混入一个无符号数,布尔值就出问题了,呵呵呵⋯⋯
俺出的问题比这个还要再隐蔽些——

int a = 1;
unsigned b = 2;

if(a - b > 0)
puts("hehe!");
mstlq 2011-02-08
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zenny_chen 的回复:]

引用 2 楼 loaden 的回复:

sizeof返回一个unsigned int,所以0 - sizeof(int)相当于4294967292。
结果为true。

如果强制转换一下,就是false了。
0 - (int)sizeof(int) > 0

哈哈,老邓回答得不错啊。
这个东西确实很容易失误。话说俺前一个项目,在做动态存储管理时俺也碰到过,在一个表达式里混入一个……
[/Quote]

这个,我也中过招,哈哈
幸亏assert多,没出大问题
pengzhixi 2011-02-08
  • 打赏
  • 举报
回复
因为sizeof的返回类型是unsigned int。所以转型一下
上善若水邻 2011-02-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 loaden 的回复:]
sizeof返回一个unsigned int,所以0 - sizeof(int)相当于4294967292。
结果为true。

如果强制转换一下,就是false了。
0 - (int)sizeof(int) > 0
[/Quote]
学习了
上善若水邻 2011-02-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 fallening 的回复:]
结果是 true
[/Quote]
为什么??
老邓 2011-02-08
  • 打赏
  • 举报
回复
sizeof返回一个unsigned int,所以0 - sizeof(int)相当于4294967292。
结果为true。

如果强制转换一下,就是false了。
0 - (int)sizeof(int) > 0
fallening 2011-02-08
  • 打赏
  • 举报
回复
结果是 true
futurepi 2011-02-08
  • 打赏
  • 举报
回复
同问sizeof(int)不是为4么?
InfidelX 2011-02-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 loaden 的回复:]

sizeof返回一个unsigned int,所以0 - sizeof(int)相当于4294967292。
结果为true。

如果强制转换一下,就是false了。
0 - (int)sizeof(int) > 0
[/Quote]
长见识了...

64,676

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧