在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.0
long long “%lld” 错误 错误 正确 正确 无法编译
long long “%I64d” 正确 正确 错误 错误 无法编译
__int64 “lld” 错误 错误 无法编译 无法编译 错误
__int64 “%I64d” 正确 正确 无法编译 无法编译 正确
long long cout 非C++ 正确 非C++ 正确 无法编译
__int64 cout 非C++ 正确 非C++ 无法编译 无法编译
long long printint64() 正确 正确 正确 正确 无法编译

上表中,正确指编译通过,运行完全正确;错误指编译虽然通过,但运行结果有误;无法编译指编译器根本不能编译完成。观察上表,我们可以发现以下几点:

  1. long long定义方式可以用于gcc/g++,不受平台限制,但不能用于VC6.0。
  2. __int64是Win32平台编译器64位长整型的定义方式,不能用于Linux。
  3. “%lld”用于Linux i386平台编译器,”%I64d”用于Win32平台编译器。
  4. cout只能用于C++编译,在VC6.0中,cout不支持64位长整型。

表中最后一行输出方式中的printint64()是我自己写的一个函数,可以看出,它的兼容性要好于其他所有的输出方式,它是一段这样的代码:

CPP
void printint64(long long a)
{
 if (a<=100000000)
  printf("%d\n",a);
 else
 {
  printf("%d",a/100000000);
  printf("d\n",a0000000);
 }
}

这种写法的本质是把较大的64位整型拆分为两个32位整型,然后依次输出,低位的部分要补0。看似很笨的写法,效果如何?我把它和cout输出方式做了比较,因为它和cout都是C++支持跨平台的。首先printint64()和cout(不清空缓冲区)的运行结果是完全相同的,不会出现错误。我的试验是分别用两者输出1000000个随机数,实际结果是,printint64()在1.5s内跑完了程序,而cout需要2s。cout要稍慢一些,所以在输出大量数据时,要尽量避免使用。

文章转自网络

C++ 长整型数据的输出相关推荐

  1. C语言从长整形中提取偶数,编程将长整型数中每一位上为偶数的书依次取出组成一个新的输...

    编写函数long fun(long x),将长整型参数x中每一位上为偶数的数依次取出,构成一个新数返回. #includelongfun(longx){intn=10,m=0;while(x){int ...

  2. c语言中把各位上为奇数的数取出,下列给定程序中函数fun()的功能是:将长整型数中每一位上为奇数的数依次取出,构成一个新数放在冲。 - 赏学吧...

    下列给定程序中函数fun()的功能是:将长整型数中每一位上为奇数的数依次取出,构成一个新数放在冲.高位仍在高位,低位仍在低位.例如当s中的数为87653142时,t中的数为7531. 请改正函数fun ...

  3. java 结果用长整数型表示_java 编程 输入正整数n,计算n!结果用长整型数表示

    题目: java 编程 输入正整数n,计算n!结果用长整型数表示 解答: import java.awt.*; import java.awt.event.*; class Test implemen ...

  4. C语言strtoul()函数:将字符串转换成unsigned long(无符号长整型数)

    头文件:#include <stdlib.h> strtoul() 函数源自于"string to unsigned long",用来将字符串转换成无符号长整型数(un ...

  5. C 二级 将长整型数s中每一位上为偶数的数依次取出, 构成一个新数放在t中。 高位仍在高位,低位仍在低位。

    给定程序MODI1.C中函数fun的功能是: 将长整型数s中每一位上为偶数的数依次取出, 构成一个新数放在t中. 高位仍在高位,低位仍在低位. 例如,当s中的数为: 87653142时,t中的数为: ...

  6. 一些值得记录的题目(将数组中相同的数据删除、判断n 阶方阵是否对称、寻找矩阵中的马鞍点、将前面各数顺序后移 m 位,最后 m 个数变成最前m 个数并输出、将一长整型数转换为十六进制,以字符串形式输出)

    1.设数组中的数据已经按照由小到大的顺序存放,请将数组中相同的数据删除,仅保留一个,然后以每行3个输出数组元素. #include<stdio.h> int main() {int arr ...

  7. java长整型定义和输出_Java数据类型及使用方法

    原标题:Java数据类型及使用方法 一.基本数据类型 整型:byte.short.int.long (在计算机中以二进制补码格式存储) 浮点型:float.double (在计算机中以IEEE754格 ...

  8. java长整型数输入格式_java编程之计算16位长整型数字中0-9出现次数(从命令窗输入数据)...

    /* *读入一个16位的长整型,利用switch语句计算0-9这十个数字中,每个字出现的次数 **/ import java.util.Scanner; class number{ public st ...

  9. 关于JS中使用JSON.parse长整型数丢失精度的问题解决

    var json = '{"smallNumber": 1, "bigNumber" : "1155931057176506370"}'; ...

最新文章

  1. 零基础能学好UI设计吗
  2. Attach Volume 操作(Part II) - 每天5分钟玩转 OpenStack(54)
  3. Go语言int类型绑定方法
  4. Docker系列5--一些问题及解决
  5. RLC协议简单理解2-RLC窗口的维护
  6. 移动端自适应布局之-----rem单位的使用
  7. 关于ActionBar的向下兼容
  8. 使用WSW将Nginx创建为Windows系统服务
  9. 计算机操作员初级 第1单元0202微型计算机基本操作 教学大纲,计算机操作员教学大纲...
  10. bootstrap中分页、面包屑导航、列表组、卡片、下拉菜单、折叠
  11. python脚本 pyqt 打包成windows可执行exe文件 pyinstaller
  12. 碎阅:一款基于douban及ONE API开发的资讯类App
  13. 我的java编程之路小小总结感想
  14. 联想 m73 黑苹果 软路由 esxi AIO
  15. 什么是超级浏览器?有什么作用?如何选择?
  16. 从零开始的数模学习(7):插值方法(预测类模型)
  17. 关于扫码点餐多人实时共享订单的思考
  18. Live555实时视频流应用总结
  19. Python网络爬虫与信息提取——网络爬虫Scrapy框架
  20. Solr高级查询Facet

热门文章

  1. 2023年第一个节日是哪一天,怎么设置节假日倒计时提醒?
  2. 中国科学院大学2016年硕转博考试试题
  3. 男人二十,男人三十。
  4. 制作原生的Win7 PE by AIK
  5. 3Dmax和blender渲染线稿
  6. MATLB|基于粒子群优化算法的智能微电网调度(含风、光、微型燃气轮机、电网输入微网、储能)
  7. JS - 15 - 异步、Promise、async、await
  8. Three.js拉伸扫描成型ExtrudeGeometry
  9. 讯客php框分类,最新大气含手机版php讯客分类信息源码商业版
  10. 新华三集团嵌入式软件笔试题