2017-02-21 49 views
1

说我正在比较一个int和一个短int。根据第173页上写的第二版“C编程语言”,short int将被转换为一个int,这是我系统上的4个字节,而不是2个字节的短整数。C - 在内存级别如何进行算术转换?

我的问题是:这将如何在内存级别上完成?短整数是否会将2个字节添加到它或将数据复制到一个完全不同的内存位置?

我刚刚编辑比较double和int到short和int。对造成的不便表示歉意。

+0

浮标编码不是整数完全不同。即使您在整数类型和相同大小的浮点类型之间进行转换,结果浮点也会由不同的位组成。这不是一个简单的按位操作。 – Kevin

+0

你不应该在代表性方面考虑它,而应该从价值方面考虑。如果'int'的值符合'double'类型的允许范围,那么一切都很好。如果不是这样,你就麻烦了。 –

+1

它的实现定义。有些机器会执行load-load-convert-compare,load-convert-compare,load-convert-save-compare,有些机器会执行load-load-compare .... load double> load int> int to double> double-double compair可能是现在最常用的,因为FPU主要是加载存储和寄存器寄存器寻址。 – user3528438

回答

1

对于大多数情况(省略一些模糊的微控制器)根本不需要存储器。一切都将在寄存器级完成。即使正在处理的类型不能保存在单个寄存器中,它也会被分成多个寄存器并进行相应的处理。

0

这种类型的比较通常发生在CPU的硬件寄存器之间。您的存储器值将被加载到寄存器中,并且转换发生在负载中。

你会得到一个序列是这样的:

CVTWL memory_location是,RO COMPL R0,R1