내가 특별히 비주얼 스튜디오 내가 부호 INT/서명되지 않은 사용하고 일부 DSP 관련 업무에 대한 2015 업데이트 3C++의 차이 부호 INT 긴 부호 INT
비주얼 스튜디오 컴파일러로 Windows에서 C++ 개발을하고있는 중이 야 long 데이터 형식입니다. C/C++ 형식으로 빌드 된이 두 가지의 차이점은 무엇입니까?
Google과 SO를 통해 조금씩 검색하여 이러한 참조를 발견했습니다. 비주얼 스튜디오 GNU C/C++ (2015
- Types documentation, 나는 여기에 C의 문서를 참조하십시오)
나는 cppreference 문서가 ISO C++ 11 표준에 대한 요약이라고 가정합니다. 그래서에서 부호와는 INT는 LP/ILP 32/64 데이터 모델에 따라 16/32 비트 부호가 "표준"부호 길이와 긴 부호 INT LP에 따라 32/64 비트가/ILP 반면 32/64 데이터 모델.
은 MSDN 및 GNU 문서에 대해서는 모든 필드는 부호 INT/부호없는 긴 32 비트를 사용하는 구현을 차감 한 금액 4,294,967,295까지의 값을 보유 할 수 있습니다. 그러나 GNU 문서는 또한 여러분의 시스템에 따라 unsigned long long이 64 비트가 될 수 있다고 말했습니다. 서명되지 않은 긴 64 비트에 대한- 을, 천장 4,294,967,295 정의되지 않은 행동이나 올바른 행동을 넘어 가고 다음과 같이
그래서 내 질문입니까?
- Visual Studio에서 컴파일 된 Windows 시스템에서 작동하는 응용 프로그램이있는 경우 basicall 부호가 없음 == 부호가없는 long입니다. 참인가 거짓인가? 내가 GNU 컴파일러에 의해 컴파일 된 응용 프로그램이 리눅스/윈도우에서 작업하는 경우
- 나는 부호없는 긴 == 부호 INT 또는 부호없는 긴 == 서명되지 않은 오래 오래 데이터 오버 플로우를 피하기 위해 여부를 확인해야합니다. 참 또는 거짓
- 이러한 Visual Studio/GNU/Clang/Intel 컴파일러로 컴파일 될 수있는 크로스 플랫폼 응용 프로그램이있는 경우 데이터가 넘치지 않도록 선 처리기를 여러 개 사용하여 환경을 명확하게 분류해야합니다. 맞음 또는 거짓
미리 감사드립니다.
편집 : @PeterRuderman에게 서명되지 않은 유형의 ceil 값을 초과하는 것은 정의되지 않은 동작임을 지적합니다.주변 포장 자체가 원인 천장 4,294,967,295 넘어 것, 부호없는 64 비트 길이의 경우
- :
그럼 내 질문 1로 변경됩니다?
'unsigned int'와 'unsigned long'이 같은 범위와 표현을 가지더라도 여전히 고유 한 유형이라는 점에 유의하십시오. –