서명되지 않은 길이는 몇 바이트입니까?


81

몇 바이트 unsigned long long입니까? 과 동일 unsigned long long int합니까?


51
sizeof (unsigned long long)를 수행합니다.
The Communist Duck


2
C 및 C ++ 표준은 컴파일러가 자동으로 선택하는 방식을 재정의하기 위해 숫자가 포함 된 항목을 채택해야합니다. float32, float64, int32 등 우리가 필요로하는 한계까지, int256 또는 float1024는 어떻습니까? ... 이것은 정말로 고통을 제거 할 것입니다 ...
jokoon

2
@gokoon : 내 대답에 설명 된대로 C 표준은 이미 가지고 int32_t, uint64_t등 C ++ 곧 표준을 받게됩니다. 헤더에 <stdint.h>있습니다.
Fred Foo 2011

1
float와 double은 어떻습니까?
jokoon

답변:


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 비트를 원하는 경우 관련 유형 (C99, C ++ 11 및 일부 현재 C ++ 컴파일러에서 사용 가능)과 함께 uint64_t헤더에 정의 <stdint.h>된를 사용하십시오.


2
@lars : sizeof(char) 정확히 하나를 반환하도록 보장됩니다 . 피연산자의 크기를 "문자 단위"수가 아니라 바이트 수로 반환합니다. 따라서 "대부분의 플랫폼에서"바이트가 아니라 모든 플랫폼에서 바이트입니다.
John Dibling

1
@John : byte 정의에 따라 다릅니다 . 동일시 char하고 바이트하면 맞습니다. equate charoctet 이면 다양합니다.
Fred Foo

4
@lars : 아니요, 그렇지 않습니다. char은 모든 플랫폼에서 항상 정확히 1 바이트입니다. 표준은 한 바이트에 몇 개의 비트가 있는지 지정하지 않지만 그것은 다릅니다. 구현은 64 비트 바이트를 사용할 수 있으며 결과적 sizeof(long long) == 1으로 준수됩니다.
John Dibling 2011

1
@lars : 어차피 이미 당신에게 찬성표를 던졌지 만 여기에 중요한 것이 있습니다. "C 표준 (ISO C99)에 의해 최소 64 비트 == 8 바이트로 보장됨"64 비트가 포함되지 않은 세계를 상상할 수 없습니다! = 8 바이트이지만 표준은이를 보장하지 않습니다.
John Dibling 2011

@John : 다시 맞습니다. 내가 이미 언어 변호사 모드에 있기 때문에 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 2011

2
+1, 반대표에 반대합니다. 대답은 'is'의 의미에 따라 다릅니다.
Andy Finkenstadt 2011

3
@Andy : 빌 클린턴? 당신인가요? ;)
John Dibling 2011-04-29

4
이것은 절대적으로 "C ++의 아름다움"이 아니라 완전한 고통입니다. : p
asimes

14

64 비트 이상이어야합니다. 그 외에는 구현이 정의되어 있습니다.

엄밀히 말하면 unsigned long longC ++ 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 년에 발표 될 것으로 기대합니다. 표준 자체에도 불구하고.
In silico

1
@In silico : 참고 자료도 찾지 못했기 때문에 소문이나 오해 였을 것 같습니다. 그래도 FDIS 상태가 완전 비준과 같지 않다고 생각합니다.
Fred Foo

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;
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.