Ⅰ 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位整型,我写了程序对它们进行了评测,结果如下表。
上表中,正确指编译通过,运行完全正确;错误指编译虽然通过,但运行结果有误;无法编译指编译器根本不能编译完成。观察上表,我们可以发现以下几点:
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 ",a);
else
{
printf("%d",a/100000000);
printf("d ",a0000000);
}
}
这种写法的本质是把较大的64位整型拆分为两个32位整型,然后依次输出,低位的部分要补0。看似很笨的写法,效果如何?我把它和cout输出方式做了比较,因为它和cout都是C++支持跨平台的。首先printint64()和cout(不清空缓冲区)的运行结果是完全相同的,不会出现错误。我的试验是分别用两者输出1000000个随机数,实际结果是,printint64()在1.5s内跑完了程序,而cout需要2s。cout要稍慢一些,所以在输出大量数据时,要尽量避免使用。
Ⅱ 什么是整型数
整型()数据是不包含小数部分的数值型数据,用字母I表示。整型数据只用来表示整数,以二进制形式存储。分类:
1、char:字符型数据,属于整型数据的一种,占用一个字节。
2、unsigned char:无符号字符型数据,属于整型数据的一种,占用一个字节。
3、short:短整型数据,属于整型数据的一种,占用两个字节。
4、unsigned short:无符号短整型数据,属于整形数据的一种,占用两个字节。
5、int:整型数据,属于整型数据的一种,占用四个字节。
6、unsigned int:无符号整型数据,属于整型数据的一种,占用四个字节。
7、long:长整型数据,属于整型数据的一种,占用四个字节。
8、unsigned long:无符号长整型数据,属于整形数据的一种,占用四个字节。
(2)长整形数显示多少扩展阅读:
整型数据分类:
基本型:类型说明符为int,在内存中占4个字节(不同系统可能有差异,此处原为2,经查证windows系统下为4,VAX系统也如此) ,其取值为基本整常数。
短整型:类型说明符为short int或short'C110F1。所占字节和取值范围会因不同的编译系统而有差异。对于16字机,short int 占2个字节,在大多数的32位机中,short int 占4个字节。但总的来说,short int 至少16位,也就是2个字节。
长整型:类型说明符为long int或long ,在内存中占4个字节,其取值为长整常数。在任何的编译系统中,长整型都是占4个字节。在一般情况下,其所占的字节数和取值范围与基本型相同。
无符号型:类型说明符为unsigned。在编译系统中,系统会区分有符号数和无符号数,区分的根据是如何解释字节中的最高位,如果最高位被解释为数据位,则整型数据则表示为无符号数。
Ⅲ C语言长整型常数,什么是长整型常数
长整型数是相对于基本整型数而言的,一般它占用的存储空间是基本整型数的2倍。具体大小随不同的编译器而不同。如果它的存储空间是k个字节,可存储数的范围是-2^(8k-1)~+2^(8k-1)-1。
整型变量可分为以下几类:
1.基本型
类型说明符为int,根据计算机的内部字长和编译器的版本,在内存中可能占2或4个字节(通常分别在16位机和32位机上),其取值为基本整常数。
2.短整型
类型说明符为short int或short,在内存中占2个字节,其取值为短整常数。
3.长整型
类型说明符为long int或long,在内存中占4个字节,其取值为长整常数。
4.64位整型(非ANSI标准)
类型说明符为__int64、long long int或long long,在内存中占8个字节,其取值为64位整常数。
5.无符号型
类型说明符为unsigned。它可以单独使用代表unsigned int,也可以作为前缀,都表示无符号整数,即永远为非负的整型变量,大于0的数据范围约扩大为原来的2倍。各种无符号类型量所占的内存空间字节数与相应的有符号类型量相同。但由于省去了符号位,故不能表示负数。下表列出了Turbo C中各类整型量所分配的内存字节数及数的表示范围。
整数的后缀
可以用后缀“L”或“l”来表示长整型数。例如:
十进制长整型数:158L (十进制为158)、358000L (十进制为358000);
八进制长整型数:012L (十进制为10)、077L (十进制为63)、0200000L (十进制为65536);
十六进制长整型数:0X15L (十进制为21)、0XA5L (十进制为165)、0X10000L (十进制为65536)。
长整型数158L和基本整型数158 在数值上并无区别。但对158L,因为是长整型数,C编译系统将为它分配4个字节存储空间。而对158,因为是基本整型,只分配2 个字节的存储空间。因此在运算和输出格式上要予以注意,避免出错。
无符号数也可用后缀表示,整型数的无符号数的后缀为“U”或“u”。例如:358u、0x38Au、235Lu均为无符号数。
前缀,后缀可同时使用以表示各种类型的数。如0XA5Lu表示十六进制无符号长整型数A5,其十进制为165。
Ⅳ C语言问题。编写程序,输入一个长整型正数,判断该数是几位数
^#include<stdio.h>
#include<math.h>
main()
{
long int x;
int i=0;
printf("input:");
scanf("%ld",&x);
do{
x=x/10;
i++;
}while(x>0);
printf("the nubmer is:%d\n",i);
}
这样就正确了,你自己运行下^_^
注: 除法运算符“/”:双目运算具有回左结合性。参答与运算量均为整型时,结果也为整型,舍去小数。例如,你输入123456 先执行123456/10 结果为12345 在继续执行12345/10 结果为1234...........最后为1/10 结果为0 不满足条件x>0 结束循环,打印i的值^_^
Ⅳ 长整型的范围是多少
在vc中,long范围等于int,4个字节,2的32方;如果处理2^54,只能用__int64
不同编译器long的范围可以不一样,
Ⅵ 整型数范围是长整型数范围是
不同的编译系统下,结果不同。在VC++下,整数与长整数范围一样,都是:
-2^31到2^31-1
2^31表示2的31次方。
Ⅶ 长整型数据范围是怎么得出来的
单片机一般是8位,整数0~255
有时太小,C语言规定出:
整型int是16位,占2字节0~65536
长整型long是32位,占4字节0~2的32次方-1
Ⅷ C语言中长整形4个字节的数据范围是多少
有些是有差别的,具体要看编译器
char/signed
char/unsigned
char:
1个字节;
char*(即指针变量):
2个字节(16位编专译属器)
4个字节(32位编译器)
8个字节(64位编译器)
short
int:
2个字节
int/unsigned
int:
2个字节(16位编译器)
4个字节(32/64位编译器)
long
int:
4个字节
float:
4个字节
double:
8个字节
long/unsigned
long:
4个字节(16/32位编译器)
8个字节(64位编译器)
long
long:
8个字节
指针4个字节(32位编译器)
Ⅸ 数字数据类型中,长整型数字类型的字段长度是几个字节
VB中的长整型
Long(长整型)变量存储为 32 位(4 个字节)有符号的数值形式,其范围从 -2,147,483,648 到 2,147,483,647(约为21亿)。
Ⅹ 长整型数据(long i;)占几个字节double c;呢占几个字节
long
占4个字节
double
8个字节用64位二进制表示
数值表示范围
±(1.7*10-308~~1.7*10308)