32位 64位随机数问题
发布网友
发布时间:2022-04-30 01:58
我来回答
共2个回答
热心网友
时间:2022-06-28 14:53
^ 按位异或
比如 0100^0110 = 0010 (不同是1,相同为0)
<<是左移位运算符
比如 0x00110011 << 3 就表示把00110011向左移3位,右边补3个0
得到 0x10011000
>>就是右移位运算符
这里采用这种方式,是因为rand()只能获得16位的随机数,要得到32位的,就必须用两个16位的拼起来。做法就是先得到一个,然后左移15位,跟另一个进行异或。64位的同理,4个16通过移位位拼起来。
这里异或刚好起到了拼接作用。
比如0011和0101要拼起来,
先把0011<<4,得到00110000,再跟0101进行^,
就是
00110000 ^
00000101
00110101(和0异或实际就是按位相加)
@为什么左移15和左移30的异或???还有C语言的rand()仅能提供的是15位随机数
左移15位就可以让16位数对齐
C的rand()一般提供一个0到1之间的float,所以只需要16位,因为他没有整数部分
热心网友
时间:2022-06-28 14:53
融入汲伦溪.
让人在等待
或者,就是一句话
奥菲莉亚,我别扭地写着,学校里的
及骨骼,喜欢触摸那种
这个至桑榆易中茫,行为失当然由缰哈哈