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

Я извиняюсь, если эта ошибка является результатом опечатки, но я не могу понять, как сделать мою переменную отрицательной, когда правильный синтаксис должен быть 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?

2 ответа

Решение

Это, несомненно, проблема подписи. Вы указали, что 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;

Я думаю, что проблема в 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
$
Другие вопросы по тегам