C++ 长整型数据的输出
在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() | 正确 | 正确 | 正确 | 正确 | 无法编译 |
上表中,正确指编译通过,运行完全正确;错误指编译虽然通过,但运行结果有误;无法编译指编译器根本不能编译完成。观察上表,我们可以发现以下几点:
- long long定义方式可以用于gcc/g++,不受平台限制,但不能用于VC6.0。
- __int64是Win32平台编译器64位长整型的定义方式,不能用于Linux。
- “%lld”用于Linux i386平台编译器,”%I64d”用于Win32平台编译器。
- cout只能用于C++编译,在VC6.0中,cout不支持64位长整型。
表中最后一行输出方式中的printint64()是我自己写的一个函数,可以看出,它的兼容性要好于其他所有的输出方式,它是一段这样的代码:
{
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++ 长整型数据的输出相关推荐
- C语言从长整形中提取偶数,编程将长整型数中每一位上为偶数的书依次取出组成一个新的输...
编写函数long fun(long x),将长整型参数x中每一位上为偶数的数依次取出,构成一个新数返回. #includelongfun(longx){intn=10,m=0;while(x){int ...
- c语言中把各位上为奇数的数取出,下列给定程序中函数fun()的功能是:将长整型数中每一位上为奇数的数依次取出,构成一个新数放在冲。 - 赏学吧...
下列给定程序中函数fun()的功能是:将长整型数中每一位上为奇数的数依次取出,构成一个新数放在冲.高位仍在高位,低位仍在低位.例如当s中的数为87653142时,t中的数为7531. 请改正函数fun ...
- java 结果用长整数型表示_java 编程 输入正整数n,计算n!结果用长整型数表示
题目: java 编程 输入正整数n,计算n!结果用长整型数表示 解答: import java.awt.*; import java.awt.event.*; class Test implemen ...
- C语言strtoul()函数:将字符串转换成unsigned long(无符号长整型数)
头文件:#include <stdlib.h> strtoul() 函数源自于"string to unsigned long",用来将字符串转换成无符号长整型数(un ...
- C 二级 将长整型数s中每一位上为偶数的数依次取出, 构成一个新数放在t中。 高位仍在高位,低位仍在低位。
给定程序MODI1.C中函数fun的功能是: 将长整型数s中每一位上为偶数的数依次取出, 构成一个新数放在t中. 高位仍在高位,低位仍在低位. 例如,当s中的数为: 87653142时,t中的数为: ...
- 一些值得记录的题目(将数组中相同的数据删除、判断n 阶方阵是否对称、寻找矩阵中的马鞍点、将前面各数顺序后移 m 位,最后 m 个数变成最前m 个数并输出、将一长整型数转换为十六进制,以字符串形式输出)
1.设数组中的数据已经按照由小到大的顺序存放,请将数组中相同的数据删除,仅保留一个,然后以每行3个输出数组元素. #include<stdio.h> int main() {int arr ...
- java长整型定义和输出_Java数据类型及使用方法
原标题:Java数据类型及使用方法 一.基本数据类型 整型:byte.short.int.long (在计算机中以二进制补码格式存储) 浮点型:float.double (在计算机中以IEEE754格 ...
- java长整型数输入格式_java编程之计算16位长整型数字中0-9出现次数(从命令窗输入数据)...
/* *读入一个16位的长整型,利用switch语句计算0-9这十个数字中,每个字出现的次数 **/ import java.util.Scanner; class number{ public st ...
- 关于JS中使用JSON.parse长整型数丢失精度的问题解决
var json = '{"smallNumber": 1, "bigNumber" : "1155931057176506370"}'; ...
最新文章
- 零基础能学好UI设计吗
- Attach Volume 操作(Part II) - 每天5分钟玩转 OpenStack(54)
- Go语言int类型绑定方法
- Docker系列5--一些问题及解决
- RLC协议简单理解2-RLC窗口的维护
- 移动端自适应布局之-----rem单位的使用
- 关于ActionBar的向下兼容
- 使用WSW将Nginx创建为Windows系统服务
- 计算机操作员初级 第1单元0202微型计算机基本操作 教学大纲,计算机操作员教学大纲...
- bootstrap中分页、面包屑导航、列表组、卡片、下拉菜单、折叠
- python脚本 pyqt 打包成windows可执行exe文件 pyinstaller
- 碎阅:一款基于douban及ONE API开发的资讯类App
- 我的java编程之路小小总结感想
- 联想 m73 黑苹果 软路由 esxi AIO
- 什么是超级浏览器?有什么作用?如何选择?
- 从零开始的数模学习(7):插值方法(预测类模型)
- 关于扫码点餐多人实时共享订单的思考
- Live555实时视频流应用总结
- Python网络爬虫与信息提取——网络爬虫Scrapy框架
- Solr高级查询Facet