# 是什么（〜0L）是什么意思？ [英] What does (~0L) mean?

### 问题描述

I'm doing some X11 ctypes coding, I don't know C but need some help understanding this.

In the C code below (might be C++ im not sure) we see `(~0L)` what does that mean? In Javascript and Python `~0` means `-1`.

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

### 推荐答案

` 0L `是一个`长`的整数值所有位设置为零 - 这通常是`的定义0 `。在`〜`表示反转所有位，这让您与设置为1的所有位`长`整数。

`0L` is a `long` integer value with all the bits set to zero - that's generally the definition of `0`. The `~` means to invert all the bits, which leaves you with a `long` integer with all the bits set to one.

In two's complement arithmetic (which is almost universal) a signed value with all bits set to one is `-1`.

The reason for using `~0L` instead of `-1L` is to be clearer about the intent - it's not meant to be used as a number at all, but rather as a collection of bits.