如何将随机散列减少为布尔值

How to reduce a random hash to a boolean value

在 c 或类似 c 的语言中,假设我有一个 random_hash 将其简化为布尔值的最便宜的方法是什么,即 01?

规范化答案的示例random_hash0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa

限制:没有 method/stdlib 个电话。

为什么 c-like,我实际上是在尝试用一种叫做 Solidity 的语言来实现它,它是在 c/javascript 之后建模的,它具有非常有限的 runtime/stdlib .

从散列中取出最大或最小位并将其用作布尔值。实际上,假设一个好的散列函数,取任何一点都应该没问题。假设散列是一个 unsigned char 数组,您可以使用按位 AND 运算符 &

(hash[0] & 1) > 0

类C: return (hash&1)>0;

假设散列是真正随机的,散列被表示为一个字节数组,你想做类似bool = (x <= 50) ? 0 : 1的事情,你可以这样做:

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

在Solidity中,可以使用(imallet也有推荐)

(value & 1) > 0

假设 value 是任何 uintXXbytesXX 类型。 > 0 对于将整数转换为 bool 很重要。