前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >程序如何运行的

程序如何运行的

作者头像
付威
发布2018-12-05 11:39:47
1.6K0
发布2018-12-05 11:39:47
举报
文章被收录于专栏:老付的网络博客

在写代码的时候,我们直接在没有编译报错的时候,直接点击运行后,ide会直接把程序的结果输出到控制台上,代码如下:

代码语言:javascript
复制
   public static void main(String[] args) { 
		int i=17;
		int j=5;
		int sum=i+j;
		System.out.println(sum);
	}

这段代码最终的结果是在控制台上面打印出:22,但是这个结果到底是怎么被执行的呢?

CPU能做什么

在硬件的世界里面,只有0和1,就是这么简单的0和1,到底是怎么做加法的呢?

我们知道CPU的功能是执行指令,有三个简单的基本操作:与,非,或三种运算。在加上位的运算一种有5种:&,|,~,«,». 利用这个几个运算如何实现代码中的15+5的运算?

首先,把加法拆解,分成两个部分: 把个位和个位相加,如果有进1的话,就用进1的值十位与另一个十位相加。得到的和在进行相加。

  1. 把15+5进行拆解就是 7+5=12,发现5+5有进位10;
  2. 利用进位的十位与10+10 =20
  3. 再把两个的和相加,20+2=22 ,没有再进位,运算结束。

根据上面的分析,我们可以使用递归的方法,写出加法的位运算代码如下:

代码语言:javascript
复制
	static int add(int i, int j){
		if(j == 0)
			return i;
		int sum = i ^ j;//得到个位相加
		int carry = (i & j) << 1;//得到进位相加
		return add(sum, carry);
	}

对这个算法进行封装成一个CPU指令,我们就可以利用二进制进行进行运算。

Java代码最终的编译结果

我们知道java的代码最终是经过编译器,转换成字节码最终由JVM解释执行,具体过程如下:

java过程
java过程

当java代码最终转换成字节码的时候,JVM虚拟机执行对应的字节指令,最终传递给CPU来执行代码,CPU计算的过程我们已经分析过,最终会调用位运算来实现加法。

CPU是如何实现位运算的呢?

(本文完)

作者:老付 如果觉得对您有帮助,可以下方的订阅,或者选择右侧捐赠作者,如果有问题,请在捐赠后咨询,谢谢合作 如有任何知识产权、版权问题或理论错误,还请指正。 自由转载-非商用-非衍生-保持署名,请遵循:创意共享3.0许可证 交流请加群113249828: 点击加群 或发我邮件 laofu_online@163.com

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-11-17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • CPU能做什么
  • Java代码最终的编译结果
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档