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