【问题标题】:How to make negative of a variable? C++如何使变量为负数? C++
【发布时间】:2017-10-06 05:12:45
【问题描述】:

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

【问题讨论】:

  • 这是一个无符号整数类型,这就是为什么你没有得到负值。 core::Size 的数据类型应带符号以保存本机整数
  • 看来core::Size 是一个unsigned 整数类型,这意味着它永远不可能是“负数”。如果您尝试打印 -loop_size_,会发生什么?
  • 这是有道理的,它是无符号的 - core::Size 是一个整数,用于永远不会变为负数的东西。我将使用不同的数据类型...谢谢!

标签: c++ variables negative-integer


【解决方案1】:

这无疑是一个签名问题。您已指定 neg_loop_size 为 core::Sizecore::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;

【讨论】:

  • 是的,core::Size 就是这样,长度测量。使用 int 修复它。
【解决方案2】:

我认为问题在于 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
$

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-27
    • 2011-02-23
    • 1970-01-01
    • 1970-01-01
    • 2010-10-12
    • 2019-11-03
    • 2016-01-18
    • 2019-01-19
    相关资源
    最近更新 更多