int,long,float的区别是啥?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了int,long,float的区别是啥?相关的知识,希望对你有一定的参考价值。

参考技术A short
【int】表示短整型,占2个字节
//注意是short,不是shout
long
【int】表示长整型,占4个字节
float
是浮点型,占4个字节
double
是双精度型,占8个字节
char
是字符型,占一个字节,注意与string
(字符串类型)的区分
如:'a'占一个字节;"a"
占两个字节,及a后面还有一个结束符'\0'.
enum
是枚举类型
这是所有数据表示的基础,可一定不能混淆哦,呵呵!
加油!
...
..
.

ACM中关于__int64与long long 的区别

在做hdoj 1019 的时候 碰到一个奇怪的问题 当我把变量定义为long long 型的时候会出现 runtime error(好像是里面出现除以0的情况),但是把long long 全改成 __inti64 就ac了,哪位大牛给我解释一下啊
runtime error的程序:
#include<iostream>
using namespace std;
int main()

__int64 s,a,b,n,i,t,tmp;
scanf("%lld",&t);
while(t--)

scanf("%lld",&n);
scanf("%lld",&a);
s=a;
for(i=1;i<n;i++)

scanf("%lld",&b);
s=a*b;
long long tt;
while(b!=0)

tmp=b;
b=a%b;
a=tmp;

a=s/a;

printf("%lld\n",a);

return 0;

ac的程序:
#include<iostream>
using namespace std;
int main()

__int64 s,a,b,n,i,t,tmp;
scanf("%I64d",&t);
while(t--)

scanf("%I64d",&n);
scanf("%I64d",&a);
s=a;
for(i=1;i<n;i++)

scanf("%I64d",&b);
s=a*b;
long long tt;
while(b!=0)

tmp=b;
b=a%b;
a=tmp;

a=s/a;

printf("%I64d\n",a);

return 0;

还有那个runtime error的程序 把输入输出改成cin cout 是可以ac的,为什么啊?
runtime error的程序是这个,一开始问题里发错了:
#include<iostream>
using namespace std;
int main()

long long s,a,b,n,i,t,tmp;
scanf("%lld",&t);
while(t--)

scanf("%lld",&n);
scanf("%lld",&a);
s=a;
for(i=1;i<n;i++)

scanf("%lld",&b);
s=a*b;
long long tt;
while(b!=0)

tmp=b;
b=a%b;
a=tmp;

a=s/a;

printf("%lld\n",a);

return 0;

__int64与long long 都是在32位平台开始使用的64位整数的数据类型,在存储方式和使用方式上没有区别。
两者的区别在于,它们命名的发起人不同,支持的平台不同。long long这个数据类型,是UNIX平台发起并支持的,而__int64是微软从win95(VC6)开始发起并支持的,在老的windows开发平台下(如VC6),不识别long long,而老的UNIX,也不识别_int64。当然,现在比较新的平台,两种数据格式和相关的定义、函数都可以兼容了。

同样,作为64位整数的printf输出格式定义,也是一样,微软使用的是%i64d,而UNIX使用的是%lld以及%llu(无符号64位)等形式。

实际上,无论哪一种,在实际效果上没有不同,只是因为定义者和使用环境造成的支持或不支持的问题。
而ACM中,编译识别系统偏向更多的支持微软系统的定义,因此应该使用__int64和%i64d
参考技术A 因为我们用的系统都是32位,所以在编译器中,int是32位,long long和__int64都是64位的,因此用哪个都行,相信我!你的问题出在,不论是long long还是__int64,如果你用printf输出,都必须用printf("%I64d\n",a)表示,千万不能用lld,用lld肯定错,你用cout就不会有这个困扰,这也就是为什么用cout能ac的原因。同理,建议你scanf最好你也别用lld,用%I64d。本回答被提问者采纳 参考技术B long long 在不同的系统中长度不一样。C语言有这样的约定:sort 两个字节,long 四个字节,int 则处在两者之间并随编译器不同而不同。没有直接对long long 定义,因而它的长度也是变化的(四个或八个字节)。而__int64 则是64位的。然而,__int64 也是没有直接定义的。在有些编译器中__int64 不可用(例如 eclipse),而有些编译器中 long long 不可用(例如 visual C++6.0)。所以我们在编译程序时应当先熟悉(可以使用sizeof() 来测试)编译器。 参考技术C long long 是32位的,__int64是64位的
他们的数的范围不一样啊
__int64 范围更大
参考技术D 我感觉是 scanf("%lld",&标识符 ); 有问题,你可以用 "%ld" 试一下。

既然你用的是C++,那么你可以用 cin 来接收输入的数据。

还有,并不是所有变量都需要64位来存储。

以上是关于int,long,float的区别是啥?的主要内容,如果未能解决你的问题,请参考以下文章

C++中long,short,int的具体区别是啥?

float和int的区别是啥

C语言中int short long 的具体区别是啥?

float和int都是32位,为什么表示范围不同?还有long和int又什么区别?

在C#中long与int64有啥区别吗

在C#中long与int64有啥区别吗