문제

할 수 있다 unsigned long int 32 비트 컴퓨터에 10 자리 숫자 (1,000,000,000-999,999,999)를 보유하고 있습니까?

또한, 범위는 무엇입니까? unsigned long int , long int, unsigned int, short int, short unsigned int, 그리고 int?

도움이 되었습니까?

해결책

그만큼 최저한의 의존 할 수있는 범위는 다음과 같습니다.

  • short int 그리고 int: -32,767 ~ 32,767
  • unsigned short int 그리고 unsigned int: 0 ~ 65,535
  • long int: -2,147,483,647 ~ 2,147,483,647
  • unsigned long int: 0 ~ 4,294,967,295

이것은 아니요, long int 할 수 없습니다 10 자리 숫자를 저장하기 위해 의존해야합니다. 그러나 더 큰 유형 long long int C99에서 C 및 C ++ 11에서 C ++에 도입되었다 (이 유형은 종종 포함되지 않은 구형 표준을 위해 구축 된 컴파일러에 의해 확장으로 지원됩니다). 컴파일러가 지원하는 경우이 유형의 최소 범위는 다음과 같습니다.

  • long long int: -9,223,372,036,854,775,807 ~ 9,223,372,036,854,775,807
  • unsigned long long int: 0 ~ 18,446,744,073,709,551,615

그래서 그 유형은 충분히 커질 것입니다 (다시, 다시, 만약에 당신은 그것을 사용할 수 있습니다).


내가이 하한으로 실수를했다고 믿는 사람들을위한 메모 - 나는하지 않았다. 범위에 대한 C 요구 사항은 가장 낮은 표현 값과 가장 높은 대표적 값이 부호 만 다릅니다. 또한 부호 비트 1과 모든 값 비트 0 인 값이 트랩 표현 법적 가치보다는. 다시 말해, int ~이다 ~ 아니다 값 -32,768을 나타내는 데 필요합니다.

다른 팁

수치 유형의 크기는 최소 크기는 C ++ 표준으로 정의되지 않습니다. 플랫폼에 어떤 크기가 있는지 알리는 방법은 사용하는 것입니다. 숫자 한계

예를 들어, int의 최대 값은 다음과 같이 찾을 수 있습니다.

std::numeric_limits<int>::max();

컴퓨터는 기본 10에서 작동하지 않으므로 최대 값은 2의 형태입니다.N-1 메모리의 숫자가 어떻게 표현되는지 때문입니다. 예를 들어 8 비트 (1 바이트)

  0100 1000

1으로 설정하면 오른쪽 가장 비트 (번호)는 2를 나타냅니다.0, 다음 비트 21, 그런 다음 22 그리고 우리가 왼쪽에 도착할 때까지 숫자가 서명되지 않은 경우 2를 나타냅니다.7.

따라서 숫자는 2를 나타냅니다6 + 23 = 64 + 8 = 72, 오른쪽에서 4 번째 비트와 왼쪽 오른쪽이 설정되기 때문에.

모든 값을 1로 설정하면 :

11111111

이제 숫자가 있습니다 (가정합니다 서명되지 않았습니다)
128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = 255 = 28 - 1
그리고 우리가 볼 수 있듯이, 그것은 8 비트로 표현할 수있는 가장 큰 가능한 값입니다.

내 컴퓨터에서 int와 롱은 동일하며 각각 -2 사이를 유지할 수 있습니다.31 2까지31 -1. 내 경험상 현대 32 비트 데스크탑 머신에서 가장 일반적인 크기.

한계를 찾기 위해 당신의 체계:

#include <iostream>
#include <limits>
int main(int, char **) {
  std::cout
    << static_cast< int >(std::numeric_limits< char >::max()) << "\n"
    << static_cast< int >(std::numeric_limits< unsigned char >::max()) << "\n"
    << std::numeric_limits< short >::max() << "\n"
    << std::numeric_limits< unsigned short >::max() << "\n"
    << std::numeric_limits< int >::max() << "\n"
    << std::numeric_limits< unsigned int >::max() << "\n"
    << std::numeric_limits< long >::max() << "\n"
    << std::numeric_limits< unsigned long >::max() << "\n"
    << std::numeric_limits< long long >::max() << "\n"
    << std::numeric_limits< unsigned long long >::max() << "\n";
}

주목하십시오 long long C99와 C ++ 11에서만 합법적입니다.

여기에 다른 사람들은 data_size 및 정밀도 등에 대한 링크를 게시합니다.
나는 그것을 스스로 알아내는 방법을 알려줄 것입니다.
다음을 수행 할 작은 앱을 작성하십시오.

unsigned int ui;
std::cout <<  sizeof(ui));

이것은 (컴파일러 및 archicture에 따라) 2, 4 또는 8 인쇄, 2 바이트 길이, 4 바이트 길이 등을 인쇄합니다.

4라고 가정하자.

이제 최대 4 바이트가 저장할 수있는 최대 값을 원하고 1 바이트의 최대 값은 (16 진) 0xff입니다. 4 바이트의 최대 값은 0x이고 8F가 이어집니다 (각 바이트마다 1 쌍의 f 쌍, 0x는 컴파일러에게 다음 문자열이 16 진수임을 알려줍니다). 이제 프로그램을 변경하여 해당 값을 할당하고 결과를 인쇄하십시오.

unsigned int ui = 0xFFFFFFFF;
std::cout <<  ui;

그것이 서명되지 않은 int가 보유 할 수있는 최대 값이며,베이스 10 표현에 표시됩니다.

이제 Long 's, Shorts 및 귀하가 궁금한 기타 정수 가치를 위해 그렇게하십시오.

NB :이 접근법은 부동 소수점 번호 (예 : 이중 또는 플로트)에는 효과가 없습니다.

도움이 되었기를 바랍니다

C ++에서, 이제 INT 및 기타 데이터는 2의 칭찬 방법을 사용하여 저장됩니다. 그것은 범위가 다음과 같습니다.

-2147483648 to 2147483647

또는 -2^31 ~ 2^31-1

1 비트는 0으로 예약되어 있으므로 양수 값은 2^(31)보다 1 미만입니다.

을 위한 서명되지 않은 데이터 유형 부호가없고 모든 비트는 데이터를위한 것입니다. 반면 서명 된 데이터 유형 MSB는 부호 비트로 표시되고 나머지 비트는 데이터 용입니다.

범위를 찾으려면 다음과 같은 작업을 수행합니다.

단계 : 1-> 제공 데이터 유형에 대한 바이트를 찾으십시오.

단계 : 2-> 계산에 따라 적용하십시오.

      Let n = no of bits in data type  

      For signed data type ::
            Lower Range = -(2^(n-1)) 
            Upper Range = (2^(n-1)) - 1)  

      For unsigned data type ::
            Lower Range = 0 
            Upper Range = (2^(n)) - 1 

예를 들어

서명되지 않은 int size = 4 바이트 (32 비트) -> 범위 [0, (2^(32)) -1

서명 된 int size = 4 바이트 (32 비트)-> 범위 [-(2^(32-1)), (2^(32-1)) -1

아니요, 10 자리 수의 일부만 유효한 범위가 0 ~ 4,294,967,295 인 서명되지 않은 긴 INT에 저장 될 수 있습니다. 당신은 이것을 참조 할 수 있습니다 :http://msdn.microsoft.com/en-us/library/s3f49ktz(vs.80).aspx

서명되지 않은 긴 int는 32 비트 컴퓨터에서 10 자리 숫자 (1,000,000,000-999,999,999)를 보유 할 수 있습니다.

아니

주어진 유형에 대한 Numeric_Limits <> 템플릿의 전문화를 살펴 봐야합니다. 헤더 안에 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top