Как сделать отрицательный из переменной? Переполнение стека

Я извиняюсь, если эта ошибка является результатом опечатки, но я не могу понять, как сделать мою переменную отрицательной, когда правильный синтаксис должен быть y = -x;

std::cout << "loop size = " << loop_size_ << std::endl;
core::Size neg_loop_size_ = -loop_size_;
std::cout << "neg loop size = " << neg_loop_size_ << std::endl;

Когда я запускаю его, это результат, который я получаю:

loop size = 4
neg loop size = 18446744073709551612

Как мне получить новую переменную, равную -4?

-3

Решение

Это, несомненно, проблема подписи. Вы указали, что neg_loop_size core::Size, core::Size скорее всего, это измерение длины. Длина не может быть отрицательной. («Сколько километров ты пробежал сегодня, Джози?», «Почему я пробежал минус 4 километра!»)

Итак, компилятор и cout правильно вынуждают -1 «зацикливаться» до максимально возможного числа с 8 байтами. Рассматривать:

   18446744073709551612 + 4 - 1
= 2^65 -1
= 0xFFFFFFFFFFFFFFFF
= (core::Size) 0 - 1

Если вы хотите получить отрицательное значение, вам нужно будет либо выполнить некоторые манипуляции со строками и преобразование самостоятельно, либо выбрать тип данных, который компилятор и cout будет интерпретировать как отрицательный. Например:

int i = 0;
i -= 1;
std::cout << "i = " << i << std::endl;
1

Другие решения

Я думаю, что проблема в Core: Size, тип данных не подписан. Итак, у вас возникли проблемы.

Если вы храните значение в целом числе, вы должны получить требуемый результат.

  int main() {
int i = 5;
int j = -i;
cout<<endl<< j << endl;

return 1;
}

Выход —

$>:~/tmp$ vim c.cpp
$>:~/tmp$ g++ c.cpp
$>:~/tmp$ ./a.out
-5
$
0

По вопросам рекламы [email protected]