¿Cómo se representa un UInt64 en un dispositivo de 32 bits (Swift 2.0)?

Un UInt64 usa hasta 8 bytes. Se representa exactamente de la misma manera en todos los dispositivos: como 8 bytes consecutivos. Un valor de 32 bits solo usaría 4 bytes. Un valor de 128 bits usaría 16 bytes. Esos también están representados de la misma manera en todos los dispositivos.

Lo que distingue a los procesadores de 32 bits de los procesadores de 64 bits es principalmente el tamaño de una dirección y el tamaño predeterminado de un registro de CPU (respectivamente 32 y 64 bits), pero la forma en que se representan los valores en la memoria no cambia.

La única diferencia en la representación de los valores en la memoria tiene que ver con la endianidad, no con el tamaño de una dirección o de los registros. En todos los casos, el valor se almacena en bytes consecutivos y la dirección del valor es igual a la dirección inferior de esos bytes, pero en las CPU Big Endian el byte más significativo se almacena en el byte con la dirección de memoria inferior y en las CPU Little Endian es almacenado en el byte con la dirección de memoria más alta. Las CPU Bi Endian pueden almacenar datos de ambas maneras.

Las CPU de Intel son Little Endian, excepto por la arquitectura IA64 del Itanium que es Bi Endian y la antigua familia de microcontroladores MCS-51 que era Big Endian.

BRAZO 1 y 2 donde Little Endian, 3 y más allá son Bi Endian.

Con dos palabras de 32 bits, obviamente. Recuerda cómo te enseñaron en la escuela cómo sumar números como 38 y 54. Trabajas con dígitos separados. Toma los dígitos más a la derecha, 8 y 4, los agrega, obtiene el dígito 2 en respuesta y 1 se transporta debido a un desbordamiento. Usted toma los segundos dígitos, 3 y 5, los agrega para obtener 8 y agrega el 1 llevado para obtener el resultado 9, de modo que la respuesta completa se convierte en 92. Un procesador de 32 bits hace exactamente lo mismo, pero en lugar de dígitos decimales, tiene 32 números enteros de bits, los algoritmos son los mismos: trabaje en dos partes de 32 bits de un número de 64 bits por separado, lidie con los desbordamientos transportando de una palabra más baja a una más alta. Esto toma varias instrucciones de 32 bits y el compilador es responsable de codificarlas correctamente.

No estoy seguro de lo que Apple está haciendo precisamente con Swift en dispositivos de 32 bits. Tengo la impresión de que Apple no está demasiado preocupada por el soporte heredado para Swift.

Pero no es difícil para las máquinas de 32 bits representar y manipular valores más grandes.

En los viejos dias. Las máquinas de 8 bits podrían representar fácilmente enteros de 16 o 32 bits.

Un valor de 16 bits se almacenaría como dos entradas de 8 bits.

Al agregar, agrega el par bajo de bytes.

Luego agregue el par alto, con la bandera de acarreo.