重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

c语言输整数长度的函数 c语言输入长整型数

C语言中如何输出长整型数值

在C/C++中,64为整型一直是一种没有确定规范的数据类型。现今主流的编译器中,对64为整型的支持也是标准不一,形态各异。一般来说,64位整型的定义方式有long long和__int64两种(VC还支持_int64),而输出到标准输出方式有printf(“%lld”,a),printf(“%I64d”,a),和cout a三种方式。

成都创新互联公司专注为客户提供全方位的互联网综合服务,包含不限于网站设计、成都网站设计、头屯河网络推广、微信平台小程序开发、头屯河网络营销、头屯河企业策划、头屯河品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;成都创新互联公司为所有大学生创业者提供头屯河建站搭建服务,24小时服务热线:028-86922220,官方网址:www.cdcxhl.com

本文讨论的是五种常用的C/C++编译器对64位整型的支持,这五种编译器分别是gcc(mingw32),g++(mingw32),gcc(linux i386),g++(linux i386),Microsoft Visual C++ 6.0。可惜的是,没有一种定义和输出方式组合,同时兼容这五种编译器。为彻底弄清不同编译器对64位整型,我写了程序对它们进行了评测,结果如下表。

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

long long定义方式可以用于gcc/g++,不受平台限制,但不能用于VC6.0。

__int64是Win32平台编译器64位长整型的定义方式,不能用于Linux。

“%lld”用于Linux i386平台编译器,”%I64d”用于Win32平台编译器。

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语言求整数的长度怎么求?也就是有多少位?帮帮忙。

#includestdio.h

#includemath.h

#includestring.h

int main()

{

char s[100];

scanf("%s",s);

printf("这个整数是%d位的\n",strlen(s));

return 0;

}

C语言求整数长度或多少位

十进制数字个数 和长度 有多种方法 算得。

下面用两种方法计算。负数有个符号位,长度比位数多 m=1。

占内存的大小用sizeof(int) 可得,通常 32位机为4字节,64位机为8字节。

例如:

#include stdio.h

int main(){

int a=123456;

int n,m=0;

char s[60];

if (a0) m=1;

sprintf(s,"%d",a);

n = strlen(s);

printf("a has digit %d length %d\n",n-m,n);

n=0;

while (1){

a = a/10;

n++;

if (a==0)break;

}

printf("a has digit %d length %d\n",n,n+m);

printf("int has %d bytes\n",sizeof(int) );

return 0;

}


网页名称:c语言输整数长度的函数 c语言输入长整型数
本文网址:http://cqcxhl.com/article/hipppe.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP