2011-10-29 5 views
2

4234967295는 unsigned int에서 가장 큰 숫자이며이 숫자에 그 숫자를 곱하면 어떻게 표시합니까? 나는 시도했다 :매우 큰 숫자 표시

long unsigned int NUMBER = 4294967295 * 4294967295; 

그러나 대답으로 1을 얻는.

+0

가능한 중복 http://stackoverflow.com/questions/2844/how-do-you-printf-an-unsigned-long-long- int)를 – mloskot

답변

3

오버플로가 발생했습니다. 16 진수 muplication를 고려

0xffffffff * 0xffffffff == 0xfffffffe00000001 
            ^^^^^^^^ 
            only the last 32 bits are returned 

용액은 long long unsigned으로 큰 형태를 사용하는 것이다

long long unsigned int NUMBER = 4294967295ULL * 4294967295ULL; 

접미사가 ULLunsigned long long을 의미한다.

하는 것은 온라인으로 작업을 참조하십시오 : 당신이 최대 INT 알고 귀하의 질문에 ideone

+0

덕분에 선생님하지만 내 수는 부호 부호없는 long int와의 NUM 같은 정수에 저장 인 경우 = 4294967295 다음, – mainajaved

0

당신의 상태가 서명되지 않은 INT를 사용하는 경우보다 큰 수 저장할 수 없음을 의미 4294967295 같다.

C의 갈망은 [source] 그래서 당신은 단지 필요 UL와 숫자 접미사 64 비트 유닉스 시스템에서 서명되지 않은 18,446,744,073,709,551,615까지 저장할 : 4294967295UL

당신에게 64 비트 유닉스 시스템을 다음 사용하지 않는 경우 long long unsigned int과 접미사를 사용해야합니다. LL

+0

덕분에 많이 선생님 \t 덕분에 선생님하지만 내 수는 부호 부호없는 long int와의 NUM = 4294967295 같은 정수에 저장이 경우는 다음 – mainajaved

-1

예, 오버플로입니다. 만약 당신이 C를 사용한다면, 내가 알기에 그렇게 많은 수의 곱셈을하는 쉬운 방법이 없습니다. 어쩌면 너 혼자서 쓸 필요가있을거야. 실제로 일부 언어는 원래 이러한 기능을 지원합니다.

1

곱셈 오버 플로우가 발생합니다.

#include <stdio.h> 
int main() 
{ 
    unsigned int a = 4294967295; 
    unsigned int b = 4294967295; 

    // force to perform multiplication based on larger type than unsigned int 
    unsigned long long NUMBER = (unsigned long long)a * b; 
    printf("%llu\n", NUMBER); 
} 
[당신이 부호 오래 오래 지능는 printf 어떻게해야합니까?] (의
+0

고마워요. 그렇지만 제 번호가 unsigned unsigned long int num = 4294967295와 같은 정수로 저장되어 있다면 – mainajaved

+0

@mainajaved 제 코멘트를 업데이트했습니다. – mloskot

+0

고맙습니다. – mainajaved