c++ - 为什么运算符的操作数需要是同一类型?

标签 c++ types casting

如果我有这样的东西:

int i = 123;
float f = 123.1;

if (f > i) {} else {}

i 将被提升为 float 并且比较将变为 if (float > float)。我的问题是为什么首先需要将 int 变量提升为 float,是因为计算机比较两个普通数字比尝试比较容易吗找出每个数字的位代表什么,然后进行比较?

最佳答案

因为“没有数字”。计算机不比较数字,也不处理数字。他们使用并比较位模式

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

现在,如果您有 10 种可能的方式来表示数字,您应该支持 100 种可能的方式来进行二元运算(或者甚至 1000 种,如果您还想考虑结果!)。

由于这无法扩展,您必须减少。而更简单的 reduce 方法是通过将相似的事物拆分成多个部分来消除它们:首先将所有数字转换为通用编码,然后对该编码进行操作,最终将结果转换回所需的结果。

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

但要使其工作,必须选择“通用格式”,以便可以表示两个操作数。并且将 int 表示为 float 比将 float 表示为 int 成功的机会更多。

关于c++ - 为什么运算符的操作数需要是同一类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28007936/

相关文章:

c++ - 如何从父类访问变量

c++ - 无法在 OpenCV 中打开共享对象文件 'libopencv_shape.so.3.1'

haskell - 将类型级别自然数转换为常规数

c - 逻辑运算后十六进制到bin

c++ - 来自“void*”的无效转换 - 类型转换

c++ - 如何在 Windows C++ 中处理事件

c++ - Dijkstra 算法 C++

haskell - 由于使用 'minBound' 无法推断(有界 a1)

postgresql - 将记录作为函数参数传递 PL/pgSQL

go - 来自基本类型分配问题的Golang类型