给定一组位(64)计算机如何知道它们属于实数还是整数?
答案 0 :(得分:2)
大多数现代计算机没有硬件类型标签,因此64位存储空间是64位数据块,这意味着什么。它可以是带符号的64位整数,也可以是无符号的64位整数,64位浮点数,两个32位整数,但是(重复以前的数据类型)。也许这是4个16位整数?也许它是一个7个字符的字符串,具有领先的8位字符串长度?
这些之间的区别在于实际执行的机器指令。因此,打字由指令决定,而不是由存储器确定。
答案 1 :(得分:1)
计算机不知道也不关心。
由程序来决定是否应将该特定内存用作整数(长整数),实数(双精度数)或字符数组。
根据语言的不同,相同的值可以在不同时刻用作双精度实数,如长整数或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指针是正式未定义的行为,但它在小端32位系统上的工作方式类似。