¿Por qué es (18446744073709551615 == -1) verdadero?

Cuando estaba trabajando enstring::npos Noté algo y no pude encontrar ninguna explicación en la web.

(string::npos == ULONG_MAX)

y

(string::npos == -1)

son verdaderas.

Entonces intenté esto:

(18446744073709551615 == -1)

lo cual también es cierto.

¿Cómo puede ser posible? ¿Es por una conversación binaria?

Respuestas a la pregunta(4)

Su respuesta a la pregunta