什么(~0L)是什么意思?

Noi*_*art 12 c c++ x11 ctypes

我正在做一些X11 ctypes编码,我不知道C但需要一些帮助才能理解这一点.

在下面的C代码中(可能是C++我不确定),我们看到(~0L)这意味着什么?在Javascript和Python中~0意味着-1.

812   int result = GetProperty(window, property_name,
813                            (~0L), // (all of them)
814                            &type, &format, &num_items, &properties);
Run Code Online (Sandbox Code Playgroud)

谢谢

Mar*_*som 19

0L是一个long整数值,所有位都设置为零 - 这通常是定义0.该~方法反转所有位,这让你有一个long设置为一个在所有位整数.

在二进制补码算法(几乎是通用的)中,所有位都设置为1的有符号值是-1.

使用~0L而不是-1L更明确的意图 - 它根本不是用作数字,而是用作比特的集合.

  • 麻烦的是,如果您调用的参数是"long long",那么`~0L`只会反转一些位,而`-1`(不需要后缀)会反转所有这些位. (2认同)
  • @Noitidart它取决于你对`long`的定义.微软将其定义为仅32位,即使对于64位软件也是如此. (2认同)