为什么运算符的操作数必须属于同一类型?

Joh*_*ohn 4 c++ types casting

如果我有这样的事情:

int i = 123;
float f = 123.1;

if (f > i) {} else {}
Run Code Online (Sandbox Code Playgroud)

i将被提升到float和比较将成为if (float > float).我的问题是为什么int变量需要首先被提升为a float,是因为计算机比较容易比较两个普通数而不是试图弄清楚每个数字的位代表然后比较它?

Emi*_*lia 5

因为"没有数字".计算机不会比较数字,也不能使用数字.他们使用和比较位模式.

事实位模式表示数字是由于我们用来将数字表示为位模式的"编码".一旦我们选择编码,对数字的操作就会成为位模式的操作.一旦我们选择了另一种编码,对数字的相同操作就会成为位模式的其他操作.

现在,如果您有10种可能的方式来表示数字,那么您应该支持100种可能的方式来执行二进制操作(如果您还想考虑结果,甚至可以支持1000种方法!).

由于这不能扩展,你必须减少.更简单的减少方法是通过将它们分成几部分来消除类似的事情:首先将所有数字转换为公共编码,然后对该编码进行操作并最终将结果转换回所需的数字.

这主要是由于可以容易地实现对具有相同编码的数字的操作,因为相同的规则适用于所有地方,并且这可以通过重用相同的电路来完成.

但为了实现这一点,必须选择"通用格式",以便可以表示两个操作数.并且将一个int表示到float中比将float表示为int更有成功的机会.