-3

如果此错误是由拼写错误引起的,我深表歉意,但是当正确的语法应为 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的新变量?

4

2 回答 2

1

这无疑是一个签名问题。您已指定 neg_loop_size 为core::Size. core::Size可能意味着是一种长度式的测量。长度不能为负数。(“Josy,你今天跑了多少公里?”,“为什么,我跑了负 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;
于 2017-10-06T05:30:54.153 回答
0

我认为问题是 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
$
于 2017-10-06T05:44:45.967 回答