mudança de bits com o tipo longo sem sinal produz resultados incorretos
Estou um pouco confuso porque queria inicializar uma variável do tipounsigned long
cujo tamanho é de 8 bytes no meu sistema (em todos os sistemas modernos, suponho). Quando eu quero atribuir1 << 63
para a variável, no entanto, recebo um aviso do compilador e o número é de fato 0. Quando faço isso1 << 30
Eu recebo o resultado esperado de2 ^ 30 = 1073741824
. No entanto, quando eu faço1 << 31
, Eu recebo o resultado de2 ^ 64
(Eu acho; na verdade isso não deveria ser possível) que imprime18446744071562067968
.
Alguém pode me explicar esse comportamento?