= (~0); 这是什么意思?

4

3
http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#Bitwise_operators - Bart
1
@Bart:多么精彩的网站! - user541686
3
这是一种错误的获取最大值的方法。相反,你应该将其赋值为“-1”,这样可以保证它能够正常运行。请参见这里的讨论。(考虑到链接问题中包含了丰富的信息,此处实际上是一个重复的问题。) - GManNickG
@GManNickG 但是 size_t 是无符号的。 - Vincent
@Vincent:你看了我提供的链接吗? - GManNickG
4个回答

2

这是一种通常用于分配一个由所有二进制位组成的size_t值,独立于size_t类型的实际大小。如果这是代码的目的,那么应该使用(size_t)(-1)

顺便说一下,这里有一个相同的问题


我认为在C语言中没有static_cast。他确实说的是C语言。 - cnicutar
3
我不会将其标记为-1,因为这是一个普遍误解,但这是错误的。实际上它们是不同的。将“-1”赋给无符号类型一定会导致该类型可以容纳的最大值。相反,将“~0”赋值可能会在补码机器上导致值为零。还有其他一些问题,请参见此处的讨论(链接:https://dev59.com/bHRA5IYBdhLWcg3w1BmW)。 - GManNickG
好的,酷!谢谢!SO(Stack Overflow)没有找到类似的...我也没有。抱歉! - Stefanos Kalantzis
@GMan:谢谢,我找不到那个问题。我会编辑答案。 - sharptooth
@Joachim:可能在某个神秘的设施里,谁知道呢。 - GManNickG
显示剩余2条评论

2
sharptooth的答案是正确的,但为了给你更多细节,~NOT的二进制运算符。基本上,你正在将NOT 0的二进制等价物分配给temp,这将将每个位设置为1。

2

~是按位取反运算符,它会翻转操作数的每个比特位。在这种情况下,操作数为0,因此每个比特位最初都是0,在应用按位取反之后,每个比特位都将变为1。最终结果是你得到一个填满1位的size_t。


1
转换一个填满1位的intsize_t的结果是,使用二进制补码表示法,得到的是一个填满1位的size_t - Steve Jessop
@SteveJessop size_t 是一种无符号类型。 - Vincent
@Vincent:但是 int 是有符号的,所以表示方式影响了 int -> size_t 转换。如果 int 是取补码,则结果将为 0,而如果 int 是符号-大小,则结果将为 (size_t)(INT_MAX) + 2 - Steve Jessop

2

这个怎么样?

C++代码:

#include <limits>

std::size_t temp = std::numeric_limits<std::size_t>::max();

C 代码:

请查看问题

我认为这是更合适的方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接