谁在Java或C++源代码中执行算术和逻辑运算
Who does the arithmetic and logic operations in the Java or C++ source code?
例如:
int a = 6;
int b = 5;
int c = a + b; // Who does this?
编译器能做到吗?
如果是,那么一个从控制台输入中获取a和b值的程序怎么样在这种情况下,object.exe文件已经创建,编译器只处理源文件,对吗?
在C++中,编译器发出指令供处理器执行。
但是,编译器可以优化常量并发出其他指令。在上述情况下,编译器可能会发出以下指令:
mov C, 11 ; Move the value 11 into register for the C variable.
使用Java,编译器创建Java字节代码,供Java虚拟机执行。同样,编译器或JVM可以简化或优化指令。
编辑1:从控制台读取
在C++中,编译器为您提供的语句发出指令,以便从控制台读取值。如果程序中没有可从控制台读取的语句,编译器将不会发出任何从编译器读取的指令。
在Java中,类似于C++,但Java字节码是由Java虚拟机(JVM)发出和执行的。
在您介绍的具体示例中,任何最小智能编译器(读取:所有编译器)都会知道结果是常量。因此,c
将被赋予11的精确值。
在从控制台读取这些变量的情况下,编译器无法对这些值进行任何假设,因此它将生成所需的处理器指令,以获得这些变量在计算时保持的任何值,然后实际作为程序的任何其他代码进行计算。
int c = a + b;
在这种情况下,处理这个语句可能最好是分两步进行。
1) 分析该语句以了解其含义(将A和B加在一起)
2) 进行实际计算。
#1很难,2很容易#1是慢的,2是快的#1是你在大学级编程中学习的算法,#2只是add
处理器指令。
通常,#1是在编译时(由编译器,如 如果gcc
或javac
)完成的,#2是在运行时a
和b
的值来自用户输入,那么这并不会真正改变事情。
相关文章:
- 使用C++中的模板和运算符重载执行矩阵运算
- 如何在两个 boost::multi_arrays (C++) 之间执行数学运算?
- 无法在问题解决方案中执行输出逻辑
- 为什么循环体中的一个基本算术运算执行得比两个算术运算慢
- 为什么变量的打印地址在每次执行时都会打印随机值,即使它是 C 中的逻辑地址?
- 在 C++ 中对 GF(2^6) 执行矩阵运算(例如乘积和逆运算)
- 我的控制台正在打印随机单词以及没有执行正确的数学运算
- C 程序如果功能中的语句不执行.在逻辑上似乎是错误的
- 提升有关逻辑运算的摩擦问题
- 为什么我的 C++ 应用以退出值 -1 终止,但某些代码逻辑未执行?
- 逻辑操作员执行顺序
- C++随机数的逻辑运算结果
- 优化的 SIMD 矢量库无法通过等效标量运算执行
- 谁在Java或C++源代码中执行算术和逻辑运算
- 这个逻辑运算工作有什么问题?
- cout 中的逻辑运算
- 如何使用逐位运算执行双精度之间的求和
- 逻辑运算:我想使逻辑运算容易
- 这就是avx浮点位逻辑运算的原因
- C/ c++中对大文件二进制数据的逻辑运算