Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在Ruby和C++;_C++_Ruby - Fatal编程技术网

C++ 在Ruby和C++;

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

我有以下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(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