在计算机的世界,都是0和1 ,利用这个0和1组成了计算机的基础,数字是如何在计算机中表示的?二进制到底是什么?
数字怎么表示
在刚开始学编程的时候,有几种常见的数据基础的数据类型占用几个字节,如int 占16个字节(不同的语言体系不同,这里以C语言为例)。
一个字节可以表示两个数字0和1 ,占16个字节就可以用2^16个数字。
为了能够表示负数,单独保留一个字节作为符号位, 所以int的整型的范围是从-32768到32767 .
二进制的换算
十进制的数字是逢十进一,二进制很简单是逢二进一,比如十进制:3 9=12. 在二进制中:1 1=10.
计算二进制的方法与十进制也相同,比如在十进制中想取个十百的数字,可以分别除10的倍数。
代码语言:javascript复制比如取456的各位的数:
456/10=45余6 ,
45/10=4 余5
4/10= 0余4
最终倒序返回时456
换成二进制的方法与十进制相同,唯一的区别是负数的表示方法不同。
代码语言:javascript复制比如获得13的二进制数据:
13/2=6余1
6/2=3余0
3/2=1余1
1/2 余1
所以13 就是倒序 1101
负数的表示方法,取反码,然后加1:
代码语言:javascript复制13的原码 1101,对应的反码是:0010,然后加1 ,0011(完整的数据:1111 1111 1111 1111 1111 1111 1111 0011)
常用的二进制的使用
二进制的运算效率高于其他计算方法,在日常的代码中,如果理解没有障碍的话,个人推荐优先使用位运算。
- 奇数和偶数的判断 a&1 = 0 偶数 a&1 = 1 奇数
- 取模运算 a % (2^n) 等价于 a & (2^n - 1) a ==> a&15
- 求绝对值 int abs( int x ) { int y ; y = x >> 31 ; return (x^y)-y ; //or: (x y)^y }
- 乘以2的次幂
10>>1=20
10>>2=40
10>>3=80