【发布时间】:2020-05-17 16:48:07
【问题描述】:
我正在学习 C++,我有这个代码:
long long unsigned number;
cout << "Introduce a non negative number: \n";
cin >> number;
cout << "The number is equal to: " << number << endl;
cout << number*number;
当我引入负值时,例如 -1 消息显示数字等于 18446744073709551615,这很好,因为我将 long 定义为非负数,所以这个数字有点像错误。
对我来说奇怪的是数字的平方给出了正确的值,即在 -1 作为输入的情况下为 1。
尽管键盘输入的数据在数据类型(无符号)方面不正确,但 C++ 继续给出原始输入值 (-1),就好像它存储在某个地方一样。
那么,C++ 将这个值保存在哪里呢?我怎样才能得到它?
同样,如果我将正方形保存为:
int a = number*number,以输入-1为例,a = 1
但是当我执行cout << a/n; 时,它显示 0 而不是 1/1 = 1(我想这与此有关)
【问题讨论】:
-
这是因为数字 -1 和 18446744073709551615 的二进制表示是相同的。区别在于您是将其视为有符号数还是无符号数。请参考stackoverflow.com/questions/40608111/…
标签: c++