A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© xiniuniu 中级黑马   /  2015-4-10 12:40  /  581 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 xiniuniu 于 2015-4-10 15:37 编辑

假设x = 2, y = 3;  x + y = ?;  从CPU的角度,他是怎样计算的呢
第1步:把2和3进行异或操作  得到结果 0001存放到某处


0010
^
0011

----------

0001


第2步:再把2和3进行与操作 得到结果 0010


0010
&
0011

-----

0010

再把0010左移1位得到0100, 判断移位后的结果是否为0, 如果为为,则前边异或所得的结果就是最终结果,如果不为0
则把前边异或得得结果,和后边与运算并左移一位的结果 再次执行异或操作

第3步:把0001和0100进行异或 得到结果0101


0001
^
0100

-----

0101


第4步 再把0001和0100进行一次与运算


0001
&
0100

-----

0000


得到结果为0000, 0000 << 1 结果仍为0, 所以2+3所得最终结果为0101 转成10进制为5

那么2 - 3呢?
2转换成2进制为 0010
-3转换成2进制为1101
1


0010
^
1101

-----

1111

2


0010
&
1101

-----

0000

0000 << 1  结果还为0, 所以最终结果为1111作为有符号数,1111转换成10进制就是-1   结果正确


结论:说明计算机会把我们人类所熟知的各种运算,转换成不同的位运算, 我们所会的加减乘除他都是不会的。但都通过位运算的变形来实现
感谢计算机科学家和数学家们所做出的努力。让我们得以享用当今信息技术的果实。既然成为不了计算机科学家,那就让我们站在他们的肩膀
上吧!

1 个回复

倒序浏览
学习了!一直没想过这个问题。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马