В приведенном ниже коде я умножил 0xffffffff
на 2 для unsigned int
(32 бит) и сохранил его в unsigned long long
(64 бит). Почему бы мне не получить фактический результат, который равен 8589934588
. Вместо этого я получаю 4294967294
. Спасибо заранее. ВЫХОД: Sizeof я = 4 Sizeof J = 8 2xi = 4294967292unsigned int (32 бит) до беззнакового длинного длинного (64 бит)
/* Code starts here */
#include <stdio.h>
#include <stdlib.h>
int main (void)
{
unsigned int i=4294967294;
unsigned long long j=i*2;
printf("Sizeof i=%d\n", sizeof(i));
printf("Sizeof J=%d\n", sizeof(j));
printf("2xi=%llu\n", j);
return 0;
}
Помните, что 'signed overflow' - это неопределенное поведение, но неподписанное переполнение просто обертывает. –