我们如何知道一组位是实数还是整数?

How do we know if a set of bits forms a real or an integer number?

给定一组位 (64),计算机如何知道它们属于实数还是整数?

电脑不知道也不关心

由程序决定该特定内存是否应该用作整数(长整型)、实数(双精度)或字符数组。

根据语言的不同,same 中的相同值可以在不同时刻用作双精度实数、长整数或 8 字节

使用C语言的例子:

#include <stdio.h>

int main(){
    double r = 12.5;
    void *pt = &r;
    long long unsigned int *up = pt;
    char *cp = pt;
    int i;

    printf("Real : %f\n", r);
    printf("Int  : %llx\n", *up);
    for (i=0; i<8; i++) {
        printf("%02x", cp[i]);
    }
    printf("\n");

    return 0;
}

输出:

Real : 12.500000
Int  : 4029000000000000
0000000000002940

将 float 指针转换为 int 指针在形式上是未定义的行为,但它在 little endian 32 位系统上的工作方式与此类似。

大多数现代计算机没有硬件类型标签,因此 64 位存储块就是 64 位数据块,这意味着一些东西。它可以是一个有符号的 64 位整数,也可以是一个无符号的 64 位整数,一个 64 位浮点数,两个 32-but(重复前面的数据类型)。也许是 4 个 16 位整数?也许它是一个 7 个字符的字符串,前导 8 位字符串长度?

它们之间的区别取决于实际执行的机器指令。因此,打字是由指令决定的,而不是由内存存储决定的。