__int64 运算问题
unsigned __int64 val1 = 719487519972980960;
unsigned __int64 val2 = 10272667579587871864;
long equal = val1 - val2;
在运算的equal为正值,请问高手该问题出现在哪,在线等待
问题点数:100、回复次数:12Top
1 楼hyigle_love(parker)回复于 2006-03-04 14:45:54 得分 0
结果是负的啊
-951110552
Press any key to continue
Top
2 楼saint123456()回复于 2006-03-04 14:52:58 得分 0
忘了说一下在
__int64 equal = val1 - val2;
这种情况的时候结果为错误的Top
3 楼y_cpp()回复于 2006-03-04 15:16:27 得分 0
好像结果还是楼上所说呀,不是正的Top
4 楼manplus(魅力加加)回复于 2006-03-04 15:24:07 得分 0
upTop
5 楼strangerryf(白痴与白痴讨论的结果一定是比白痴更为白痴的结论)回复于 2006-03-04 16:40:50 得分 0
在limits.h中有定义
_I64_MIN
Minimum value for a variable of type __int64
-9223372036854775808
_I64_MAX
Maximum value for a variable of type __int64
9223372036854775807
_UI64_MAX
Maximum value for a variable of type unsigned __int64
18446744073709551615 (0xffffffffffffffff)
val的值超出了__int64的范围,内部处理好像直接转换成__int64,然后就成了负数了。
$ bc
bc 1.06
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
719487519972980960 + 8174076494121679752
8893564014094660712
9223372036854775807 这个是__int64的最大值Top
6 楼ximig(xiao)回复于 2006-03-04 17:09:35 得分 0
楼上的说的有道理~~~~Top
7 楼ugg(逸学堂(exuetang.net))回复于 2006-03-04 21:50:38 得分 0
unsigned __int64 val1 = 719487519972980960;
unsigned __int64 val2 = 10272667579587871864;
long equal = val1 - val2;
在运算的equal为正值,请问高手该问题出现在哪,在线等待
~~~~~~~~~~~~~~~·
最好用long long类型表示64位,这样可以在语言层次控制数据。而不是依赖编译器环境。Top
8 楼bohlee(我心澎湃)回复于 2006-03-07 00:47:20 得分 0
markTop
9 楼strangerryf(白痴与白痴讨论的结果一定是比白痴更为白痴的结论)回复于 2006-03-08 22:15:48 得分 0
翻了翻标准C++03里边没有long long,C99里边应该叫做long long int。Top
10 楼fiftymetre(50米深蓝)回复于 2006-03-09 00:20:33 得分 0
strangerryf(白痴与白痴讨论的结果一定是比白痴更为白痴的结论)
说的好啊Top
11 楼hyigle_love(parker)回复于 2006-03-10 15:49:06 得分 0
怪不得昨天我想用long long 的时候编译有错误
哈哈!
顶! strangerryf(白痴与白痴讨论的结果一定是比白痴更为白痴的结论)
Top
12 楼ruodeer(看我的个性签名都给我分)回复于 2006-03-10 22:44:01 得分 0
我的印象中也只有long long 呵呵Top




