C++ 在Ruby和C++;
我有以下Ruby代码C++ 在Ruby和C++;,c++,ruby,C++,Ruby,我有以下Ruby代码 x = 33078 x << 16 # => 2167799808 x=33078 x 2167799808 在C++中,代码是 int x = 33078; x << 16 # => -2127167488 intx=33078; x-2127167488 我知道这与溢出有关,但是我怎样才能得到C++与Ruby相同的结果? < p> 33078 p>你需要使用一个与Ruby int .p/p相同的字节大小的整数。 pry(m
x = 33078
x << 16
# => 2167799808
x=33078
x 2167799808
在C++中,代码是
int x = 33078;
x << 16
# => -2127167488
intx=33078;
x-2127167488
我知道这与溢出有关,但是我怎样才能得到C++与Ruby相同的结果?
< p> <代码> 33078 p>你需要使用一个与Ruby int .p/p相同的字节大小的整数。 pry(main)> x = 33078
=> 33078
pry(main)> x.size
=> 8
试一试
C中的int通常是32位,而不是64位(或8字节) #包括
int main()
{
uint64_t x=33078;
std::coutactically使用long-long
更安全。更好的是,使用无符号类型。或者要获得与Ruby相同的任何数字(任意大小)的结果,请使用大型整数库。该数字只有32位。使用无符号long就足够了。不过,使用64位类型(如long-long)可能更安全。
long int x
#include <iostream>
int main()
{
uint64_t x= 33078;
std::cout<< (x<< 16);
}
$ g++ -std=c++11 test.cpp && ./a.out
$ 2167799808