繁体   English   中英

在Ruby和C ++中,左移位16

[英]Left bit shift by 16 in Ruby and C++

我在Ruby中有以下代码。

x = 33078
x << 16
# => 2167799808

在C ++中代码是

int x = 33078;
x << 16
# => -2127167488

我知道这与溢出有关,但我怎样才能让C ++给出与Ruby相同的结果?

33078 << 16不适合整数,这就是为什么在C++它会溢出并变为负值。 同时在ruby中,类型会自动转换为足以存储此计算结果的大小。

如果您希望能够在C++计算此值,请使用具有更高最大值的类型。 在这种情况下, unsigned int就足够了,但是如果你想计算更大的值,你可能需要long long甚至unsigned long long

您需要使用与Ruby int相同的字节大小的整数。

 pry(main)>   x = 33078
=> 33078
 pry(main)> x.size
=> 8

尝试

 long int x

通常,C中的int是32位,而不是64位(或8字节)。

#include <iostream>

int main()
{
  uint64_t x= 33078;
  std::cout<< (x<< 16);
}

$ g++ -std=c++11 test.cpp && ./a.out
$ 2167799808

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM