다양한 유형의 64 비트 데이터 모델 (LLP64/IL32P64, LP64/I32LP64, ILP64, SILP64)이 있으므로 64 가지 표준 지정 방법이 무엇입니까? 부호없는 정수 리터럴?64 비트 데이터 모델에서 64 비트 부호없는 정수 리터럴 지정
ULL의 접미사를 지정하면 충분합니까? 아니면 일부 데이터 모델에서 리터럴이 128 비트로 해석되도록해야합니까?
다양한 유형의 64 비트 데이터 모델 (LLP64/IL32P64, LP64/I32LP64, ILP64, SILP64)이 있으므로 64 가지 표준 지정 방법이 무엇입니까? 부호없는 정수 리터럴?64 비트 데이터 모델에서 64 비트 부호없는 정수 리터럴 지정
ULL의 접미사를 지정하면 충분합니까? 아니면 일부 데이터 모델에서 리터럴이 128 비트로 해석되도록해야합니까?
갖고 계신 경우 <cstdint>/<stdint.h>
을 사용해야합니다. 이것은 줄 것이다
uint64_t
는UINT64_C()
매크로 APPEND에게 적절한 접미사를 구비함으로써, 입력 uint64_t
의 상수를 생성하는 매크로 인 사이즈 64 비트 부호없는 정수의 형태이다.제 생각에 특정 비트 폭에 정수 리터럴을 접미사로 붙일 방법이 없습니다. 유일한 옵션은 l, ul, ll 및 ull입니다.
당신이 편집증 환자라면 long
/long long
의 크기를 확인하기 위해 #if
에서 리터럴을 포장해야합니다. 다시 그런
, KennyTM 위에서 지적했듯이, 한 당신의 리터럴 는 64 비트 값에 할당 된 64 비트 범위 및에이기 때문에, 그것은 중요하지 않습니다 많은 문자 자체가 64 또는 128 비트 인 경우 또는 그거야?
컴파일러가 더 큰 비트 너비가 필요한 정수를 더 작게 (불일치 경고) 할당하고 있다고 불평하지 않겠습니까? –
대문자 접미사를 사용하면 부호가있는 리터럴을 1l, 1ll 대신 1L, 1LL로 표시 할 수 있습니다. – pixelgrease
... 1/l, 0/O를 적절히 구별하는 글꼴을 사용하십시오 ... – DevSolar
C 및 C++에는 표준화 된 32/64/128 비트 변수 유형이 없습니다. 예를 들어 어떤 시스템에서는 32 비트와 64 비트가 길다. 성가시다. 그러나 대부분의 OS는 uint32
등과 같이 당신을 도울 수있는 더 나은 typedef를 제공하므로 필요한 정확한 유형을 선택해야한다.
좋은 configure
스크립트는 시스템에서 제공하는 기능을 확인하고 작동하는지 테스트 한 다음 실행중인 올바른 아키텍처에 적합한 유형을 선택하는 데 도움이됩니다.
C 및 C++ * do *는 '
@amaurea - ** 정확한 크기 **가없는 시스템에서는'uint32_t'와 같은 이름을 사용할 수 없습니다. 대부분의 경우'uint_least32_t' 등이 더 나은 선택이 될 것입니다. –
'uint32_t'와'uint64_t'가없는 @Pete Becker 시스템은 찾기가 거의 불가능합니다. 바이트가 8 비트가 아닌 다른 시스템과 다른 카테고리에 속하는 다른 카테고리와 다른 호기심에 빠지겠습니까? – amaurea
대부분의 경우 중요하지 않습니다. 접미사를 지정하지 않으면 정수 리터럴의 유형은 해당 값에 의해 결정됩니다. 컴파일러에 32 비트 unsigned long
과 64 비트 unsigned long long
이있는 경우 부호가없는 값은 unsigned long
에 적합하기에는 너무 크지 만 unsigned long long
에 대해서는 너무 크지 않은 부호있는 값은 unsigned long long
입니다.
정수를 'uint64_t'에 할당하는 것이 좋을 것입니다. – kennytm
@KennyTM : 문제가 생길 수있는 시점은 최대 2^32 - 1입니다. – DevSolar
@DevSolar : ULL 접미어가 붙은 정수로 18446744073709551615까지만 유효합니다. – kennytm