Побитовые операторы Javascript

#javascript

#javascript

Вопрос:

Я пытаюсь выяснить некоторые различия между C # и Javascript. Хорошо, возьмем этот код на Javascript:

 var j = 0x783a9b23;
var bt = ((16843134 ^ (16843134 - 1)) * j);
  

После выполнения этого «bt» будет 6051320169.

Теперь, после выполнения этого в C#:

 int j = 0x783a9b23;
int bt = ((16843134 ^ (16843134 - 1)) * j);
  

«bt» будет равно 1756352873. Конечно, не то же самое. Есть идеи, почему Javascript не видит, как это видит C #?

Ответ №1:

Вы можете сделать это, чтобы заставить его работать как в C#

 var j = 0x783a9b23;
var bt = ((16843134 ^ (16843134 - 1)) * j);
bt = bt % 2147483647
  

Это потому, что в c # ваше целое число превышает предел в 2 147 483 647.

Комментарии:

1. 1 или int bt = checked((16843134 ^ (16843134 - 1)) * j); для выявления переполнения

2. Вау, это мило. Я всегда так долго брал этот материал для granit до сих пор, когда мне действительно нужно понять вещи более низкого уровня, поскольку я конвертирую некоторый шахматный код в Javascript просто как упражнение, чтобы узнать больше. Миллион благодарностей.