簡體   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