使用按位与,或和十六进制数字了解JS中的计算

tim

我试图理解这里共享的一段代码:https : //stackoverflow.com/a/2117523/2586761

// returns a valid GUID
'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
    var r = Math.random() * 16 | 0;
    var v = c === 'x' ? r : (r & 0x3 | 0x8);
    return v.toString(16);
});
// "3bce4931-6c75-41ab-afe0-2ec108a30860"

我从这个问题了解使用按位或0到地板上的号码,一个3.142 | 0将被截断的部分返回一个整数,但是当涉及到将其应用到十六进制数我猜,失去时,我们再或者像:randomNumber & 0x3 | 0x8

我发现十六进制值有一个toString方法(数字没有!):

0x3.toString() // returns '3'

而且我猜想可能randomNumber & 0x3 | 0x8正在返回一个两位值,该值是所需范围内的ascii字符(不仅是数字)……但是我猜到了,我找不到一个很好的引用,它给了我整个图片。

谁能一步步指导我/提供参考?

这个问题似乎相关,但是并没有专门针对JS,也没有与我的示例匹配:就十六进制结果而言,按位与逻辑AND / OR


更新:

从那以后,我注意到在探索该问题的原始问题上有很多很好的答案,尤其是https://stackoverflow.com/a/28921801/2586761,但是没有一个答案能回答我的所有问题。

特别是,如何不使用数字将数字转换为字符String.fromCharCode()

罗斯兰·巴达洛夫(Ruslan Batdalov)

不,既不执行&也不|转换为ASCII字符,此转换由last进行v.toString(16)&|进行按位运算。

函数第二行之前,r0x0之间包含一个随机整数0xf它可以用四个位表示:r== abcd,其中a,b,c和d为0或1。

r & 0x3使除后两位外的所有内容无效(因为3是二进制11)。因此,r & 0x3== 00cd。

| 0x8设置第一位(因为8是二进制1000)。因此,r & 0x3 | 0x8== 10cd。

结果,整个表达式r & 0x3 | 0x8采用的最低两个有效位r并将它们附加到二进制10上。在执行此操作之前,我们可以具有从0x0到0xf的任何数字,但是在此之后只能有四个变体:0x8(二进制1000),0x9(二进制1001),0xa(二进制1010)或0xb(二进制1011)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用按位与,或和十六进制数字了解JS中的计算

来自分类Dev

十进制和十六进制按位与

来自分类Dev

解析64位十六进制数字

来自分类Dev

十六进制数字的C位运算

来自分类Dev

如何计算十六进制文件中的校验和?

来自分类Dev

处理十六进制数字时,如何使用位偏移量和长度来获取值?

来自分类Dev

十六进制校验和如何计算?

来自分类Dev

Java十六进制数字中的问题

来自分类Dev

使用Qalculate以十六进制执行计算

来自分类Dev

如何从Objective C中的NSData十六进制值中按索引获取位值

来自分类Dev

通过按位运算将位数组转换为C中的十六进制数组

来自分类Dev

MariaDB按位与的十六进制字符串文字

来自分类Dev

如何将十六进制数字的列中的每个值逐位反转?

来自分类Dev

在bash中添加两个256位十六进制数字?

来自分类Dev

如何获取十六进制数字AES实现的位

来自分类Dev

如何获取十六进制数字AES实现的位

来自分类Dev

十六进制到二进制转换的填充,因此每个十六进制数字产生4位

来自分类Dev

十六进制数字的NumberFormatException

来自分类Dev

十六进制网格的计算

来自分类Dev

十六进制或二进制数字中的数字之前是否允许使用数字分隔符?

来自分类Dev

perl中按字母和十六进制的多重排序

来自分类Dev

检查SQL中十六进制的最后一位

来自分类Dev

如何在javascript中存储256位十六进制

来自分类Dev

如何从存储在 QByteArray 中的十六进制值计算校验和

来自分类Dev

16位十六进制时间戳(使用python转换)

来自分类Dev

使用boost :: property_tree解析来自XML的十六进制数字和十进制数字

来自分类Dev

sscanf和scanset停止读取十六进制数字

来自分类Dev

十六进制颜色的数字和字母如何不同?

来自分类Dev

在python中计算十六进制校验和

Related 相关文章

  1. 1

    使用按位与,或和十六进制数字了解JS中的计算

  2. 2

    十进制和十六进制按位与

  3. 3

    解析64位十六进制数字

  4. 4

    十六进制数字的C位运算

  5. 5

    如何计算十六进制文件中的校验和?

  6. 6

    处理十六进制数字时,如何使用位偏移量和长度来获取值?

  7. 7

    十六进制校验和如何计算?

  8. 8

    Java十六进制数字中的问题

  9. 9

    使用Qalculate以十六进制执行计算

  10. 10

    如何从Objective C中的NSData十六进制值中按索引获取位值

  11. 11

    通过按位运算将位数组转换为C中的十六进制数组

  12. 12

    MariaDB按位与的十六进制字符串文字

  13. 13

    如何将十六进制数字的列中的每个值逐位反转?

  14. 14

    在bash中添加两个256位十六进制数字?

  15. 15

    如何获取十六进制数字AES实现的位

  16. 16

    如何获取十六进制数字AES实现的位

  17. 17

    十六进制到二进制转换的填充,因此每个十六进制数字产生4位

  18. 18

    十六进制数字的NumberFormatException

  19. 19

    十六进制网格的计算

  20. 20

    十六进制或二进制数字中的数字之前是否允许使用数字分隔符?

  21. 21

    perl中按字母和十六进制的多重排序

  22. 22

    检查SQL中十六进制的最后一位

  23. 23

    如何在javascript中存储256位十六进制

  24. 24

    如何从存储在 QByteArray 中的十六进制值计算校验和

  25. 25

    16位十六进制时间戳(使用python转换)

  26. 26

    使用boost :: property_tree解析来自XML的十六进制数字和十进制数字

  27. 27

    sscanf和scanset停止读取十六进制数字

  28. 28

    十六进制颜色的数字和字母如何不同?

  29. 29

    在python中计算十六进制校验和

热门标签

归档