gpt4 book ai didi

c++ - 如何判断一个32位/64位的值是否有某个16位的值?

转载 作者:太空宇宙 更新时间:2023-11-04 06:22:36 25 4
gpt4 key购买 nike

问题

考虑以下 32 位和 64 位值:

  uint32_t iVal32 = 0x AB CD 12 34;
uint64_t iVal64 = 0x AB CD 12 34 56 78 CA BE;
  1. 如何判断iVal32是否包含某个16位(字)值? 假设 0xCD12
  2. 如何判断iVal64是否包含某个16位(字)值? 假设 0x3456

更新 1(稍后添加)

  • 0xCD12 要检查的单词值可能在每个单词边界的 iVal32 中的任何位置。
  • 0x3456 要检查的单词值可能在每个单词边界的 iVal64 中的任何位置。

更新 2(稍后添加)

我承认问题中有一个荒谬的错误。在我之前的示例中,要检查的字值不在 iVal32iVal64 中的字边界内。因此,我的更正是:

  • 对于iVal32,要检查的字值可以是0xABCD0x1234。因此,例如,0xCD12 不应在 iVal32 中找到。
  • 对于iVal64,要检查的字值可以是以下之一:0xABCD0x12340x56780xCABE。因此,例如,0xCD120x34560x78CA 不应在 iVal64 中找到。

备注

  • 解决方案旨在用于在 Unicode 字符串中搜索 16 位字符的函数。在 x86 中,该函数一次读取两个字符;在 x64 中,该函数一次读取四个字符。
  • 我问这个是因为我注意到 glibc strchr()(适用于 8 位字符)的实现试图一次测试一个长字,但我不太理解代码。

最佳答案

bool contains (uint32_t haystack, uint16_t needle)
{
return ((haystack & 0xffff) == needle) ||
(((haystack >> 16) & 0xffff) == needle);
}

bool contains (uint64_t haystack, uint16_t needle)
{
return ((haystack & 0xffff) == needle) ||
(((haystack >> 16) & 0xffff) == needle) ||
(((haystack >> 32) & 0xffff) == needle) ||
(((haystack >> 48) & 0xffff) == needle);
}

关于c++ - 如何判断一个32位/64位的值是否有某个16位的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32100772/

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