二进制
二进制转换
1.计算机为什么使用二进制?
因为计算机最核心的计算原件是CPU,CPU外边有引脚,引脚是通电用的,通电时有时候通的是高电频有时候通的是低电频,用 “1” 来表示高电频,"0"表示低电频,所以用二进制来表示,所谓二进制就是逢2进1。
2.十进制和二进制表数的共通点:基数。
说明:任何进制都是有基数(Radix)的,十进制的基数是10,二进制的基数是2。
3.二进制和十进制的转换
转十进制算法:数字x基数^位次幂+
例如:二进制数0101用十进制表示的数就是:1x2^0 + 0x2 ^1 + 1x2 ^2 + 0x2 ^3 = 5
八进制数047用十进制表示就是:7x8^0+4x8 ^1+0x8 ^2 = 39
十六进制数AF用十进制表示就是:F(就是15)x16^0+A(就是10)x16 ^1=175
十进制转二进制算法:除2取余(从下往上取)
例如:十进制数114转为二进制就是:01110010
说明:一直除2直到余数为1,然后从1开始从下往上取即可。
简便算法:114在64(2^6)和128(2 ^7)之间,于是可以进行如下操作:
64(2 ^6)+32(2 ^5)+16(2 ^4)+2(2 ^1),其中2 ^ x 位次幂,位次幂有值说明其对应的位就是1,所以通过式子可以看出在0, 2, 3位上没有值,就是0。而计算机中8位算一个字节,因为其第8位没有值,故将0补上,然后按从左往右顺序排出来就是:01110010。
总结:十进制转二进制就是将十进制数转为2 ^n次幂的和,然后看对应的哪个位置应该有1,然后将结果整合就可以了。
二进制中相关概念:原码、反码、补码
原码:计算机表示正数的时候用的就是原码,如:十进制数转二进制数。
反码:将原码取反。
补码:计算机表示负数的时候用的就是补码,先将原码取反,然后加1。8位的表示范围 是-128~-127。
例1:-17转二进制
分析:先将17用原码表示为:00010001,转负数的过程:先将其最高位符号位设为1然后将剩下的位取反,结果为:11101110,最后加1为:11101111,这个数表示的就是-17。
严格来讲,在计算机中,正数的补码就是它自己,补码主要针对负数,计算机表示数的时候(假设是8位),如果说明了这个数是一个带符号的数,且最高位是1,代表就是负数(如果不是带符号的数,表示正数);最高位是0,代表的是正数。
例2:二进制负数11000100表示的十进制数是多少?
分析:二进制转十进制过程:符号位不变,其余位取反,然后再将取反的结果+1,得到原码。再确定该负数表示的是十进制数是多少,过程为:将符号位1去掉,因为它就相当于是个 “-” 号,然后其余位取反+1,得到该负数对应的原码(原理:原码取反+1变补码,补码取反+1变原码):0111100,该原码表示的十进制数是60,加上前面的符号位就是-60。
为什么负数用补码来表示?
有两个好处:
1)0的表述可以实现统一。如果+0和-0都用原码来表示,+0就是00000000,-0就是10000000(C语言规定,把内存的最高位作为符号位,且用0表示正数,用1表示负数),此时表述不统一了,如果是补码来表示,就是将原码(+0)取反+1,此时结果为:100000000,而计算机在进行加法运算时,如果是8位的话,多出来的一位就溢出了,此时+0和-0的表述是一样的。
2)减法可以当做加法来运算。因为在计算机的CPU内部是没有减法器的,逻辑电路上只能实现加法运算。例如:5-3用加法来表示就是5+(-3),将5和-3用二进制表示(-3用补码来表示,如果用原码来表示的话,结果肯定不正确,跟-0用原码表示的原理一样)为:00000101、11111101,然后两个数相加得到的结果为:00000010,表示的就是2。
二进制、八进制、十进制、十六进制的互相转换
八进制十六进制:先将八进制转为十进制,然后将十进制转为二进制。最简单是将二进制转为十六进制。
二进制转十六进制:将二进制数以4位为一个单位(十六进制数一个数就可以代表二进制的4位)划分,然后对每个单位再转为十六进制。
十进制转二进制:除2求余。
十进制转八进制:除8求余。
二进制逻辑(位)运算-重点
七种位运算介绍
&:与运算,遇0则0。如:1 & 1=1,1 & 0=0。只要有0结果就是0。
|:或运算,遇1则1。如:1 | 1=1,1 | 0=1。只要有1结果就是1。
~:取反,1-0 0-1
^:异或运算,口诀:不进位加(相同为0,相异为1)。如:1 ^ 0=1,1 ^ 1=0。
" >> ":右移,补符号位,符号位为0就补0,为1补1。
" << ":左移,永远补0。
" >>> ":无符号右移。不管符号位是0还是1,都是补0。
移位运算和乘除运算的关系
对于正整数来说,右移一位相当于" /2 “,左移相当于” x2 "。计算机对于位运算来说,移位运算效率是非常高的。
例如:a=3,b=4,现将两个进行数交换。
使用位运算进行交换:a=a ^ b;b=a ^ b;a=a ^ b;
整个过程如下图所示:
长整数和短整数的转换
首先,不管是什么类型,短整数转长整数补符号位就可以了,值是不会发生变化的,例如:八位的二进制正数01101101,变成十六位的二进制数为:00000000 01101101;八位的二进制负数11000110,变成十六位的二进制数为:11111111 11000110。但是,长整数转短整数时,计算机是将前面的数直接砍掉,这时会发生精度丢失。
常用的位数
bit:一位
Byte:8位,就是一个字节,计算机内部输入数的时候,最少是8位,Byte是计算机做实际运算的时候的最小单位。
KB:1000个字节,这里的 " k "是大写的,小写的 " k ",表示的是位。
MB:1024个KB。
GB:1024个MB。
TB:1024个GB。
1024倍增
…