我在Ruby中有以下代码。
x = 33078
x << 16
# => 2167799808
在C ++中代码是
int x = 33078;
x << 16
# => -2127167488
我知道这与溢出有关,但我怎样才能让C ++得到与Ruby相同的结果?
答案 0 :(得分:5)
33078 << 16
不适合整数,这就是C++
溢出并获得负值的原因。同时在ruby中,类型会自动转换为足以存储此计算结果的大小。
如果您希望能够在C++
中计算此值,请使用具有更高最大值的类型。在这种情况下,unsigned int
就足够了,但如果您想要计算更大的值,则可能需要long long
甚至unsigned long long
。
答案 1 :(得分:0)
您需要使用与Ruby int相同字节大小的整数。
pry(main)> x = 33078
=> 33078
pry(main)> x.size
=> 8
尝试
long int x
通常C中的int是32位,而不是64位(或8字节)。
答案 2 :(得分:0)
#include <iostream>
int main()
{
uint64_t x= 33078;
std::cout<< (x<< 16);
}
$ g++ -std=c++11 test.cpp && ./a.out
$ 2167799808