Estoy pasando por un montón de preguntas de la entrevista de C++ solo para asegurarme de que no haya nada obvio que yo no sé. Hasta el momento no he encontrado nada que no sabía ya, salvo esto:Respuesta a una pregunta de la entrevista de práctica
long value;
//some stuff
value &= 0xFFFF;
La pregunta es "¿qué hay de malo con este código" Y sugiere que se trata de algo relacionado con las arquitecturas de destino.
A menos que la respuesta sea solo "el valor no se ha inicializado", no puedo ver ningún problema. Por lo que puedo decir, solo está enmascarando los 2 bytes menos significativos del valor, y se garantiza que long
tendrá al menos 2 bytes, por lo que no hay ningún problema.
¿Es posible que long
solo tenga 2 bytes en la arquitectura de destino y es posible que pierda el bit de signo? O tal vez que el 0xFFFF es un int
y int
tiene solo 2 bytes?
Gracias de antemano.
No trabajaría para un empleador que requiera responder preguntas tan vagas. No es un problema de endianess (las diferencias de endianess no aparecen en aritmética), sino una extensión de signo, que le di +1 a John Knoeller. En general, es una buena idea hacer todas las operaciones de bits sin firmar para evitar problemas inesperados como este. – Tronic
Observe que 'long' tiene al menos 32 bits. En las plataformas de 8 bits, eso es 4 bytes (por supuesto, eso todavía puede causar problemas de firma para no-2complementos). –
¿Qué pasó con tu respuesta, Johannes? –