user2617633
user2617633

Reputation: 11

Bit shifting/type casting in javascript with unsigned 32 bit integers?

I'm trying to convert some complex C# bitshifting code into javascript (node), but I'm having issues with this kind of conversion as an example:

var d = false;
var k = 61;
var dd = 103;

uint r = 2924539136;
r |= unchecked((byte)(d ? (k + dd) : (k - dd)));

Console.WriteLine("result: " + r);  // 2924539350

Is there some way to replicate the (byte) casting in javascript to where it computes the value I'm looking for, I have this so far, but it just results in -42.

r |= (d ? (k + dd): (k - dd));

Upvotes: 1

Views: 95

Answers (1)

georg
georg

Reputation: 214969

var d = false;
var k = 61;
var dd = 103;

r = 2924539136;

b = (d ? (k + dd) : (k - dd))
x = (r | (b & 0xFF)) >>> 0

returns

x = 2924539350

The trick is to use &0xFF to mask all but lower 8 bits in b and >>>0 to convert a signed 32-bit number to unsigned.

Upvotes: 1

Related Questions