C++ 位运算符不';在C+中,它不能像预期的那样工作+;

C++ 位运算符不';在C+中,它不能像预期的那样工作+;,c++,bit-manipulation,bit,C++,Bit Manipulation,Bit,我试图找出某个字符串中是否包含所有唯一的字符。我的方法是这样的,我正在初始化一个64位的变量,比如说places,并将其设置为0。现在,我迭代字符串并计算当前字符和“A”(可能最小的ASCII)之间的ASCII值差。如果(C++中的常数)有(1)类型,在你的情况下,1有类型 int ,而且你的平台似乎有32位INT,所以当你使用小写字母时,你就超出了范围。明显的解决方法是使用长类型的-long代码> 1L,甚至更好的无符号长代码> 1UL。 static_cast<uint64_t>

我试图找出某个字符串中是否包含所有唯一的字符。我的方法是这样的,我正在初始化一个64位的变量,比如说places,并将其设置为0。现在,我迭代字符串并计算当前字符和“A”(可能最小的ASCII)之间的ASCII值差。如果(C++中的常数)有(1)

类型,在你的情况下,1有类型<代码> int <代码>,而且你的平台似乎有32位INT,所以当你使用小写字母时,你就超出了范围。明显的解决方法是使用长类型的-long代码> 1L<代码>,甚至更好的无符号长代码> 1UL<代码>。

static_cast<uint64_t>(1) << pos

static_cast(1)效率较低,但看起来很酷:
return std::unoded_set{s.begin(),s.end()}.size()==s.size()
std::cout-Well如果你尝试
std::cout-Well,你会得到什么?为什么不调试你的代码,看看为什么失败?Pop-quick2:看看当你试图看到你从
std::cout-Unrelated得到什么时会发生什么:
#include
不应该被使用()而
使用std;
应该被避免()。它们一起强化了另一方最糟糕的行为,导致了一些非常难以理解的错误。不要这样做。有些平台也只有32位长,因此
1UL
在那里也不起作用。请使用
UINT64_C(1)
要获取uint64\u t类型的常量文本,您帮了大忙。我意识到我的1是一个32位整数,我将其左移超过32位,因此它可能返回一个垃圾值。感谢您指出。@LightYagmi它不会计算垃圾值-它的计算结果为0。
static_cast<uint64_t>(1) << pos