2015-08-04 5 views
0

В c или c-подобном языке, если у меня есть random_hash, что является самым дешевым способом уменьшить его до логического значения, то есть 0 или 1?Как уменьшить случайный хеш до логического значения

Пример random_hash нормализовать ответы: 0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa

Ограничения: нет метода/STDLIB вызовов.

Почему c-like, я на самом деле пытаюсь сделать это на языке под названием Solidity, который моделируется после c/javascript, который имеет очень ограниченное время выполнения/stdlib.

+0

Я не понимаю .. Какова связь между хешем и логическим? –

+0

Самый дешевый способ? 'return false;' – imallett

+0

Предположим, что хеш случайный, мне нужно логическое значение, представляющее это случайное значение. То есть если бы это был не хэш, а число, подобное «82», и я знал, что он никогда не будет выше 100, я мог бы сказать «bool = (x <= 50)? 0: 1' – Christopher

ответ

3

Возьмите самый большой или маленький бит из хэша и используйте его как логическое. На самом деле, любой бит должен быть хорошим, предполагая хорошую хэш-функцию. Если предположить, что хэш-массив беззнаковых символов, вы можете использовать побитовое И оператор &

(hash[0] & 1) > 0 
1

Если предположить, что хэш действительно случайным образом, хэш представлен в виде массива байтов, и вы хотите сделать что-то вроде bool = (x <= 50) ? 0 : 1, вы можете сделать это:

bool = (hash[0] <= 127) ? 0 : 1; 
+1

'hash [0] & 0x80! = 0' будет производить то же самое. –

+1

Это полудиапазон char –

+0

@Christopher unsigned char имеет значения от 0 до 255, так что это на полпути между ними. – dbush

2

в солидности, вы можете использовать (как imallet также предложил)

(value & 1) > 0

при условии, что это value любого uintXX или bytesXX типа. Значение > 0 важно для преобразования целого в bool.

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

  • Нет связанных вопросов^_^