gpt4 book ai didi

algorithm - 位掩码——何时使用十六进制与二进制

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:54:11 25 4
gpt4 key购买 nike

我正在解决 Cracking The Coding Interview 中的一个问题,该问题要求我用尽可能少的指令交换整数中的奇数位和偶数位(例如交换位 0 和 1,交换位 2 和 3,等等)

作者的解决方案围绕着使用掩码在一个数字中抓取奇数位,在另一个数字中抓取偶数位,然后将它们移动 1。

我得到了她的解决方案,但我不明白她是如何捕获偶数/奇数位的。她为 32 位整数创建了两个位掩码——均为十六进制。这两个是:0xaaaaaaaa 和 0x55555555。我知道她实际上是在创建等同于 1010101010... 的 32 位十六进制整数,然后将其与原始数字进行 AND 运算以分别获取偶数/奇数位。

我不明白的是她为什么要用十六进制?为什么不直接编码 10101010101010101010101010101010?她是否使用十六进制来减少冗长?什么时候应该使用一个而不是另一个?

最佳答案

这是为了减少冗长。二进制 10101010101010101010101010101010、十六进制 0xaaaaaaaa 和十进制 2863311530 都表示完全相同的值;他们只是使用不同的基础来这样做。使用一个或另一个的唯一原因是为了可读性。

  • 大多数人显然不想在这里使用小数;它看起来像一个任意值。

  • 二进制很清楚:1 和 0 交替出现,但是有这么多,看不出这是一个 32 位值,或者中间没有隐藏一对相邻的 1 或 0某处。

  • 十六进制版本利用了分块。假设您认识到 0x0a == 0b1010,您可以在脑海中想象出假定值中的 8 组 1010。
  • 另一种可能性是八进制的 25252525252,因为...好吧,也许不是。您可以看到 something 是交替的,但除非您大量使用八进制,否则不清楚二进制中的交替模式是什么。

关于algorithm - 位掩码——何时使用十六进制与二进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41668035/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com