2015-02-08 3 views
0

я искал хоть какой-то псевдокод для некоторого кода, и я наткнулся на фразуНеоднозначность псевдокод фраза

lowest 32 bits of

После очень долгого времени поиска через веб-сайт, я наткнулся на ответ:

То, что мы хотим сделать, - это работа с 64-разрядным номером и 0xffffffff, чтобы получить самые низкие 32 бита

Мой код

MT[i] = ((1812433253*(MT[i-1]^(((MT[i-1]))>>30)))+i) && 0xffffffff; 

Если ответ верный, можете ли вы дать мне краткое объяснение, почему этот ответ правильный, но если этот ответ неверен, вы можете дать мне правильный ответ.

Будет ли этот код давать мне самые низкие 32 бита ((1812433253*(MT[i-1]^(((MT[i-1]))>>30)))+i)?

Answer Website

+0

Двойной-et ('&&') является *** логическим *** и, не побитовым. Значение результата вашего выражения будет *** всегда *** be '1' или' 0'. –

+1

@JoachimPileborg ... или '0'. – Barry

+1

@Barry Конечно, я думал о логическом * или *, который всегда будет '1'. Должна ли вообще прекратить пить ... –

ответ

2

Вы используете logical AND:

MT[i] = ((1812433253*(MT[i-1]^(((MT[i-1]))>>30)))+i) && 0xffffffff; 

Вы хотите использовать bitwise AND:

MT[i] = ((1812433253*(MT[i-1]^(((MT[i-1]))>>30)))+i) & 0xffffffff; 

Первое выражение даст вам либо true (если первое значение не равно нулю) или false. Второе выражение даст вам наименьшие 32 бита этого значения.

+0

спасибо за это сообщение –

+0

Можете ли вы дать мне определение самого низкого 32 бит? –

+0

@IrrationalPerson Самый низкий здесь означает наименее значимые 32 бита. – Barry

Смежные вопросы