前言
写文章一直没有说题外话的习惯,正好趁着这个时机聊一聊。这个系列目前更新14篇文章了,文章之间看似很散,但却一直是有大纲主线的,当时之所以起了“Android修炼”这个名字,而不是细划成一个个小模块,一是真的懒,二是吧感觉没有自由,总觉得那样条条框框太限制了,写作嘛跟写作业还是不一样的。
我自己也是有自己的一个节凑的,就像这篇文章,很小众,但却在之前的文章里一直都是有涉及的,所以我想写了,与其说是为了说与他人说,还不如说是为了自己,让自己看源码更轻松点罢了,这也许是博客的目的吧。在帮助自己的同时,能让他人也有所收获,是一件幸事。
希望我们都能在这个社会里,不急躁,不丧失自我。
原码
原码是一种计算机中对数字的二进制表示方法,以整数 5 和 -5 为栗子,第 1 位来表示符号位,0代表正,1代表负,见下:
反码
正数的反码和原码一样,以整数 5 为栗子,见下:
负数的反码就是在原码的基础上符号位保持不变,其他位取反,以整数 -5 为栗子,见下:
补码
正数的补码和原码一样,以整数 5 为栗子,见下:
负数的补码就是反码+1,以整数 -5 为栗子,见下:
<< (左移)
正负整数规则相同,向左被移出的位被丢弃,右侧用 0 补充。在使用补码作为机器数的机器中,以整数 5 << 2 为栗子:
正负整数规则相同,则以 -5 << 2 为栗子:
所以结果 5 << 2 = 20,-5 << 2 = -20 ,在数字没有溢出的前提下,在数字 x << y = x *
>> (有符号右移)
该操作符会将第一个操作数向右移动指定的位数。向右被移出的位被丢弃,拷贝最左侧的位以填充左,以整数 5 >> 2 为例:
同样以整数 -5 >> 2 为例:
>>> (无符号右移)
该操作符会将第一个操作数向右移动指定的位数。向右被移出的位被丢弃,左侧用0填充。因为符号位变成了 0,所以结果总是非负的。对于非负数,有符号右移和无符号右移相同。就不说了,这里以整数 -5 >>> 2 = 2+··+2 为例:
位运算
位运算的规则见下,需要注意的是,同样需要按补码形式参加按位与运算,如上文一样,结果再转成我们的原码:
好了,本文到这里,关于原码、反码、补码和位运算的介绍就结束了。如果本文对你有用,来点个赞吧,大家的肯定也是阿呆i坚持写作的动力。