如何将随机散列减少为布尔值
How to reduce a random hash to a boolean value
在 c 或类似 c 的语言中,假设我有一个 random_hash
将其简化为布尔值的最便宜的方法是什么,即 0
或 1
?
规范化答案的示例random_hash
:0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa
限制:没有 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
是任何 uintXX
或 bytesXX
类型。
> 0
对于将整数转换为 bool
很重要。
在 c 或类似 c 的语言中,假设我有一个 random_hash
将其简化为布尔值的最便宜的方法是什么,即 0
或 1
?
规范化答案的示例random_hash
:0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa
限制:没有 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
是任何 uintXX
或 bytesXX
类型。
> 0
对于将整数转换为 bool
很重要。