unsigned long long有多少个字节?


81

有多少个字节unsigned long long?一样unsigned long long int吗?


51
做sizeof(unsigned long long)。
共产主义鸭子


2
C和C ++标准应采用带有数字的内容,以覆盖编译器自动选择的方式。像float32,float64,int32之类的东西达到我们需要的任何限制,那么int256或float1024呢?...这真的可以消除
麻烦

2
@gokoon:正如我在我的答案解释,C标准已经有了int32_tuint64_t等C ++会收到他们与即将推出的标准。它们在标题中<stdint.h>
Fred Foo

1
浮点数和双倍数呢?
11

Answers:


79

摘要:它是64位或更大。

unsigned long long与相同unsigned long long int。它的大小取决于平台,但C标准(ISO C99)保证至少为64位。long longC89中没有此功能,但显然MSVC也支持它,因此它非常可移植。

在当前的C ++标准(于2003年发布)中,没有long long,尽管许多编译器都支持它作为扩展。即将到来的C ++ 0x标准将支持它,并且其大小将与C中的相同,因此至少为64位。

您可以使用表达式获得确切的大小,以字节为单位(在典型平台上为8位)sizeof(unsigned long long)。如果要精确地使用64位,请使用uint64_t标头中定义的<stdint.h>和一堆相关类型(在C99,C ++ 11和某些当前C ++编译器中可用)。


2
@lars: sizeof(char) 保证返回正好一个。它返回操作数的字节数,而不是“ char单位”数。因此,“不是在大多数平台上”的字节是在每个平台上的字节。
John Dibling 2011年

1
@John:这取决于byte的定义。如果等于char和字节,那是对的。如果等于char八位位组,那么它会变化。
Fred Foo

4
@lars:不,不是。在每个平台上,char始终都是一个字节。标准未指定字节中有多少位,但这是另一回事。一个实现可以使用64位字节,这将导致sizeof(long long) == 1和保持一致。
John Dibling

1
@lars:无论如何,我已经支持过您,但这是一个挑剔的问题:“由C标准(ISO C99)保证至少为64位== 8字节”,我无法想象64位的非嵌入式世界! = 8个字节,但标准不对此进行保证。
John Dibling

@约翰:再次正确。由于我已经处于语言律师模式,因此删除了64位== 8个字节。我听说实际上有一个字节为16位的嵌入式平台。
Fred Foo

17

与C一样,C ++的优点在于这些东西的大小是实现定义的,因此,如果不指定使用的编译器,就没有正确的答案。那两个一样吗?是。“ long long”是“ long long int”的同义词,对于将接受两者的任何编译器而言。


57
美丽还是诅咒?
Michael Burr

2
尽管您的说法在技术上是正确的,但该标准要求long long至少64位长,而且我不知道任何实现定义了64位以外的任何大小。当128位编译器问世时,这种情况可能会改变,但是对于当前的编译器来说,假定64位是不可行的。
Boaz Yaniv

2
+1,反击反对派。答案取决于“是”的含义。
安迪·芬肯斯塔特

3
@安迪:比尔·克林顿?那是你吗?;)
John Dibling 2011年

4
这绝对不是“ C ++的美”,这是一个完全的痛苦:p
asimes 2015年

14

它必须至少为64位。除此之外,它是实现的定义。

严格来说,unsigned long long直到C ++ 0x标准才在C ++中成为标准。 unsigned long long是类型的“简单类型说明符” unsigned long long int(因此它们是同义词)。

long long组的类型也是在C99和甚至被标准化之前是一个共同的扩展的C ++编译器。


1
“最近批准了吗?” 上次我检查他们是否考虑将其推迟到2012
。– Fred Foo


1
@In silico:我读过。我还读过一些有关可能延迟的内容,但老实说我不记得在哪里。
Fred Foo

1
@larsmans:除非我看到有关FDIS延迟的官方消息(搜索引擎查询“ C ++ 0x FDIS延迟”不会给我带来任何影响),否则我完全希望该标准能够在2011年发布,因此尽管标准本身。
2011年

1
@in silico:我也没有找到参考,所以我想这可能是谣言还是误解。不过,我认为FDIS的地位与完全批准不一样,是吗?
弗雷德·福

3

使用运算符sizeof,它将为您提供以字节表示的类型的大小。1字节为8位。请参阅以下程序:

#include <iostream>

int main(int,char**)
{
 std::cout << "unsigned long long " << sizeof(unsigned long long) << "\n";
 std::cout << "unsigned long long int " << sizeof(unsigned long long int) << "\n";
 return 0;
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.