二进制与十进制相互转换及位运算引发的简单思考

背景

几乎所有计算机语言均有位运算,以python为例计算如下,那么为什么会有类似的转化,以及背后深层次的原理值得探查一番

a = 60
b = 13
转化为二进制后
------------------
a = 0011 1100
b = 0000 1101
-----------------
a&b = 0000 1100
a|b = 0011 1101
a^b = 0011 0001
~a  = 1100 0011

位运算种类

二进制的位运算大体包括以下几类

位运算 描述 实例
& 按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0 (a & b) 输出结果 12 ,二进制解释: 0000 1100
| 按位或运算符:只要对应的二个二进位有一个为1时,结果位就为1。 (a|b) 输出结果 61 ,二进制解释: 0011 1101
~ 按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1 。~x 类似于 -x-1 (~a ) 输出结果 -61 ,二进制
<< 左移动运算符:运算数的各二进位全部左移若干位,由 << 右边的数字指定了移动的位数,高位丢弃,低位补0。 a << 2 输出结果 240 ,二进制解释: 1111 0000,可按a*2^n计算
>> 右移动运算符:把">>"左边的运算数的各二进位全部右移若干位,>> 右边的数字指定了移动的位数 a >> 2 输出结果 15 ,可按a/2^n计算,二进制解释: 0000 1111

关于二进制和十进制位的相互转化

  1. 十进制转二进制


    十进制转二进制.png

    十进制转二进制小数.png
  1. 二进制转十进位


    二进制转十进制.png

关于二进制的符号位

  1. 二进制中的表数范围
    无符号是0-255;有符号是-128-127
  2. 解释
  • 8位二进制码有2^8=256个状态.如果用来表示无符号数,就可以表示0~255恰好256个二进制数;
  • 而如果表示带符号数,则最高位就是符号位,0表示"+",1表示"-",剩下的7位用来表示绝对数(采用补码形式).0用"+0"表示,正数为+1+127,负数为-1-127,剩下一个"-0"则用来表示-128(在数学中,0是没有正负的),所以,带符号数的表示范围就成了-128~+127了.
  1. 扩展


    整型字节表示.png

你可能感兴趣的:(二进制与十进制相互转换及位运算引发的简单思考)