2016-09-14 9 views
-2

Итак, у меня есть включено следующее:64битного вопрос Вычитания

size_t Num2= 2359198081 
size_t Num1= 2359197799 

size_t Diff= Num2 - Num1; 

если я,

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

я,

Diff: 18446744071938113404 

Если я делать int64_t вместо size_t то как и ожидалось, я получаю отрицательное значение, так как Num2 и Num1 больше 2 повышений до 32

Если я,

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

Тогда я получаю,

Diff: 282

, который, как ожидалось.

Что я здесь делаю неправильно? скорее, как я могу заставить это сделать правильное 64-битное вычитание?

+2

Показать реальный код. То, что вы описываете, не имеет смысла, поэтому должно произойти что-то, о чем вы не говорили. Предоставьте программу, которая компилирует, запускает и показывает проблему. –

+1

'size_t' - это неподписанный тип. Если вы ожидаете отрицательного значения, настройте свои ожидания. И показать реальный код; с тем, что вы показали, 'Num2 - Num1' дает 282. Возможно, вы вычисляете' Num1 - Num2'?Прочитайте это: [mcve] –

+0

Как вы можете получить отрицательное значение с помощью целых чисел unsigned? –

ответ

3

Можете ли вы выслать свой код в соответствии с запросом другого в комментариях (извините, не мог комментировать из-за требования 50+ rep). Поскольку size_t равно unsigned int или unsigned long int, вычитание должно давать 282, если вы не используете систему машинного перевода/компиляции, которая реализует unsigned int короче 32 бит.

Я пробовал это, и он работает правильно (64-бит). Так как Diff в вашем случае печатает 0xFFFFFFFF966A0000, я думаю, вы используете 64-битную реализацию на size_t. Больше можно сказать только, если вы публикуете свой полный код!

+0

Глупые правила. Имейте 50. –

+0

Yay! Давайте прокомментировать! Спасибо – 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; 

печатает:

Что, что вы получаете. Ну, вы утверждаете, что получаете 18446744071938113404, что немного отличается, поэтому я предполагаю, что ваши фактические цифры разные, и ваш вопрос не является точным.

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

печатает:

Что, что вы хотите.

Demo