¿Por qué las dos operaciones siguientes arrojan resultados diferentes en Java para x = 31
o 32
pero los mismos resultados para x=3
?Los resultados de Java son diferentes para (int) Math.pow (2, x) y 1 << x
int x=3;
int b = (int) Math.pow(2,x);
int c = 1<<x;
Resultados:
x=32: b=2147483647; c=1;
x=31: b=2147483647; c=-2147483648;
x=3: b=8 ; c=8
Una sutil diferencia es que pow() es ** ** mucho más lenta, incluso si la respuesta es la misma. pow() tiene error de redondeo, mientras que 'int' tiene overflow. Puede intentar '1L << 32' que es igual a' 2147483648' –