一、二进制数
二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”。
为了让大家更好的理解二进制数,下面笔者将借用十进制数来与二进制数进行对比去讲解。首先我们先从位权说起,对于十进制数42来说,4表示的就是4×10 = 10,2表示的就是2×1 = 2。这里和各个数位上的数值相乘的10、1,就是位权。
基数:数值的表现方法,进位计数制中各数位上可能有的数值的个数,十进制的基数是10,二进制的基数是2;
其实大家所说的数值,表示的就是构成数值的各数位的数值和位权相乘后相加的结果。
举例:二进制数100111用十进制数表示的话是39
解释:1×32 + 0×16 + 0×8 + 1×4 + 1×2 + 1×1 = 39
二、移位运算
移位运算和乘除运算的关系:
移位运算指的是将二进制数值的各数位进行左右移位,我们在学习和理解二进制的移位运算时,可以通过与十进制数的移位运算对对比,这样可以很好的帮助我们去理解和学习移位运算
在c语言中以 >> 表示右移 、 << 表示左移;其中箭头所指的方向表示要移位的位数;
eg: >> 2 :表示右移两位 5 << : 表示左移五位
首先我们用一个十进制数去举例说明,a = 9 ,当我们需要对a进行移位运算时,如果我们进行左移2位的操作,操作之后a的值将会变为900;
我们将9转化为二进制数为1001,左移两位100100(十进制为36),右移两位10(十进制为2);
读到这里时,读者是否还记得我们上面所提到的基数这个概念,十进制数的基数为10,二进制数的基数为2,此时我们在去对比上述十进制数9和二进制数1001左移两位后与原本数值的大小对比(十进制)
我们发现十进制数左移2位数值变为了原来的100倍也就是(10的2次幂)
二进制数左移2位数值变为了原来的4倍也就是(2的2次幂)
其实,我们反复思考几遍就会发现确实如此。十进制数左移后会变成原来的10倍、100倍、1000倍·····同样,二进制数左移后会变成原来的2倍、4倍、8倍······,右移则会变为原来的1/2 、1/4 、1/8······;
逻辑右移与算数右移的区别:
算数右移:将二进制数作为带符号的数值进行运算,移位后要在最高位填充移位前符号位的值(0或1),如果数值是用补数表示的负数值,那么右移后在空出来的最高位补1,如果是正数,只需在最高位补0即可;
逻辑右移:右移后在空出来的最高位补0即可;