我们如何知道一组位是实数还是整数?
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 位字符串长度?
它们之间的区别取决于实际执行的机器指令。因此,打字是由指令决定的,而不是由内存存储决定的。
给定一组位 (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 位字符串长度?
它们之间的区别取决于实际执行的机器指令。因此,打字是由指令决定的,而不是由内存存储决定的。