LONGLONG 转化为 unsigned long long 的问题

ahao2009 2010-04-24 03:26:20
问题描述:
函数声明 LONGLONG GetSpace();函数可能返回-1,下面的代码

unsigned long long llResult = GetSpace();
if(llResult == -1)
{
dosomething;
}

按照道理,dosomething应该是永远都不会执行的啊,因为通过-1转化为unsigned long long 结果为14757395258967641292,但是有时却执行了dosomething,实在没搞明白为什么,请高手指教一下,谢谢。

编译环境 vs2005;

...全文
401 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ahao2009 2010-04-24
  • 打赏
  • 举报
回复
感谢各位的回复,明白了,看来要好好补习下基础知识了。
finder_zhang 2010-04-24
  • 打赏
  • 举报
回复
用VS2005试过了, unsigned long long 64位无符号
楼主,不管是多少位的无符号,把 -1 赋值给一个数,结果就是把他的全部位置1
而-1,也是相当于全部的位都是1

无论是 8位 16位 甚至是 7位 5位 1位 的位域,都试过了,全部位是1时,就是-1

所以应该一个全部位都是 1 的数,与 -1 比较是,他们就是相等的.

Eleven 2010-04-24
  • 打赏
  • 举报
回复
看看-1的补吗是不是和它相等。。。
zyq5945 2010-04-24
  • 打赏
  • 举报
回复
刚在VS2008上看了,unsigned long long还是4字节无符号整形。
有符号整形的-1值和无符号整形的最大值在内存中值是一样的。
这个你可以看下补码,原码就清楚了。
ahao2009 2010-04-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 keiy 的回复:]
变成机器码后,就无符号之分了,都是ffffffffffffffff,当然相等
[/Quote]

Keiy的意思是否是: 当llResult和-1比较,类型要以llResult为准,所以-1其实会转化为unsigned long long,所以比较就相等了,不知道理解是否正确,请指教。
柯本 2010-04-24
  • 打赏
  • 举报
回复
变成机器码后,就无符号之分了,都是ffffffffffffffff,当然相等
社会栋梁 2010-04-24
  • 打赏
  • 举报
回复
unsigned long long llResult合法?

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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