大同网站建设制作,免费网站在线观看人数在哪直播,网站设计策划书怎么写,wordpress 163 授权码在C/C中#xff0c;64为整型一直是一种没有确定规范的数据类型。现今主流的编译器中#xff0c;对64为整型的支持也是标准不一#xff0c;形态各异。一般来说#xff0c;64位整型的定义方式有long long和__int64两种(VC还支持_int64)#xff0c;而输出到标准输出方式有pri…在C/C中64为整型一直是一种没有确定规范的数据类型。现今主流的编译器中对64为整型的支持也是标准不一形态各异。一般来说64位整型的定义方式有long long和__int64两种(VC还支持_int64)而输出到标准输出方式有printf(“%lld”,a)printf(“%I64d”,a)和cout a三种方式。
本文讨论的是五种常用的C/C编译器对64位整型的支持这五种编译器分别是gcc(mingw32)g(mingw32)gcc(linux i386)g(linux i386)Microsoft Visual C 6.0。可惜的是没有一种定义和输出方式组合同时兼容这五种编译器。为彻底弄清不同编译器对64位整型我写了程序对它们进行了评测结果如下表。
变量定义输出方式gcc(mingw32)g(mingw32)gcc(linux i386)g(linux i386)MicrosoftVisual C 6.0long long“%lld”错误错误正确正确无法编译long long“%I64d”正确正确错误错误无法编译__int64“lld”错误错误无法编译无法编译错误__int64“%I64d”正确正确无法编译无法编译正确long longcout非C正确非C正确无法编译__int64cout非C正确非C无法编译无法编译long longprintint64()正确正确正确正确无法编译
上表中正确指编译通过运行完全正确错误指编译虽然通过但运行结果有误无法编译指编译器根本不能编译完成。观察上表我们可以发现以下几点
long long定义方式可以用于gcc/g不受平台限制但不能用于VC6.0。__int64是Win32平台编译器64位长整型的定义方式不能用于Linux。“%lld”用于Linux i386平台编译器”%I64d”用于Win32平台编译器。cout只能用于C编译在VC6.0中cout不支持64位长整型。
表中最后一行输出方式中的printint64()是我自己写的一个函数可以看出它的兼容性要好于其他所有的输出方式它是一段这样的代码
?View Code CPPvoid printint64(long long a)
{if (a100000000)printf(%d\n,a);else{printf(%d,a/100000000);printf(%08d\n,a%100000000);}
} 这种写法的本质是把较大的64位整型拆分为两个32位整型然后依次输出低位的部分要补0。看似很笨的写法效果如何我把它和cout输出方式做了比较因为它和cout都是C支持跨平台的。首先printint64()和cout(不清空缓冲区)的运行结果是完全相同的不会出现错误。我的试验是分别用两者输出1000000个随机数实际结果是printint64()在1.5s内跑完了程序而cout需要2s。cout要稍慢一些所以在输出大量数据时要尽量避免使用。