2016-09-14 4 views
-2

그래서, 내가 가지고있는 다음과 같은 - 내가 할 경우64 비트 부호없는 뺄셈 문제

size_t Num2= 2359198081 
size_t Num1= 2359197799 

size_t Diff= Num2 - Num1; 

,

std::cout << "Diff: " << Diff; 

내가 얻을

Diff: 18446744071938113404 

난 다음이 size_t의 int64_t 대신 할 경우 Num2와 Num1이 2보다 커지면 예상 한대로 음의 값을 얻습니다.

내가 할 경우

,

std::cout << "Diff: " << Num2 - Num1 << std::endl; 

은 그 때 나는 얻을

DIFF : 282

예상대로입니다.

내가 여기서 잘못된 것은 무엇입니까? 오히려 어떻게이 올바른 64 비트 빼기를 할 수 있습니까?

+2

실제 코드를 표시하십시오. 당신이 묘사하고있는 것은 의미가 없기 때문에 언급하지 않은 것을 계속해야합니다. 문제를 컴파일하고 실행하고 보여주는 프로그램을 제공하십시오. –

+1

'size_t '는 부호없는 유형입니다. 부정적인 가치를 기대한다면 기대치를 조정하십시오. 실제 코드를 보여줍니다. Num2-Num1'은 282가됩니다. 아마도 Num1-Num2를 계산하고 있습니까?읽기 : [mcve] –

+0

어떻게 '부호없는'정수를 사용하여 음수 값을 얻을 수 있습니까? –

답변

3

다른 의견에 따라 귀하의 코드를 게시 할 수 있습니까 (50 + 담당자 요구 사항으로 인해 미안합니다). size_tunsigned int 또는 unsigned long int이기 때문에 32 비트보다 짧은 unsigned int을 구현하는 시스템/컴파일 시스템을 사용하지 않는 한 빼기는 282가되어야합니다.

나는 이것을 시도하고 올바르게 (64 비트) 작동합니다. 귀하의 경우 Diff0xFFFFFFFF966A0000을 인쇄하고 있기 때문에 size_t에도 64 비트 구현을 사용하고있는 것 같습니다. 전체 코드를 게시하는 경우에만 더 많은 것을 말할 수 있습니다!

+0

어리석은 규칙. 50. –

+0

야호! 코멘트하자! 고마워 – asterx

1

문제는 당신이 Diff = Num2 - Num1 말을 의미한다는 것입니다하지만 당신은 실수로 Diff = Num1 - Num2 말했다 :

size_t Num2= 2359198081; 
size_t Num1= 2359197799; 
size_t Diff = Num1 - Num2; 
std::cout << Diff << std::endl; 

인쇄 :

18,446,744,073,709,551,334

당신이 얻고있는 것입니다 어느. 글쎄, 당신은 약간 다른 숫자 인 18446744071938113404을 얻고 있다고 주장한다. 그래서 나는 실제 숫자가 다르고 당신의 질문이 정확하지 않다고 추측한다.

size_t num2 = 2359198081; 
size_t num1 = 2359197799; 
size_t diff = num2 - num1; 
std::cout << diff << std::endl; 

인쇄 : 당신이 원하는 무엇

282

.

Demo

관련 문제