吾爱乐享
个人学习博客

php学习之二进制的基础相关知识

说明:二进制是由1和0构成的一个32位的数字,逢二进一

二进制:0和1

00000000 00000000 00000000 00000000

例如:10进制的5对应的二进制为:

00000000 00000000 00000000 00000101

所谓的进制就是进位制:是人们规定的一种进位方式,对于任何一种进制,表示某一位置上的数运算时 缝几进1

  • 十进制:逢十进一
  • 八进制:缝八进一
  • 二进制:逢二进一
  • 十六进制:缝十六进一

二进制:是由数字0和1组成

八进制:由0,1,2,3,4,5,6,7组成

十进制:由0,1,2,3,4,5,6,7,8,9组成

十六进制:由0-9以及a,b,c,d,e,f组成

二进制数在系统中,位叫做bit,也称位比特,每个二进制数0或1就是一个位(bit)

位是数据存储的最小单位,其中8bit也称位一个字节(byte)

  • 1b(byte)=8bit
  • 1kb=1024b=2^20b
  • 1mb=1024kb=2^20b
  • 1gb=1024mb=2^30b
  • 1tb=1024gb=2^40b
  • 1pb=1024tb=2^50b

十进制和二进制的转换

十进制转二进制

对于整数部分,用被除数反复除以2,除第一次外,每次除以2均取前一次的商的整数部分作为被除数并依次记下每次的余数,另外,所得的商最后一位余数是所求二进制的最高位

口诀:先写商在写余,无余数则写零

得出的结果反向写出来

10的二进制:1010

二进制转十进制

进制数第0位(最后一个)的权值是2的0次方,第1位的权值是2的1次方,第2位的权值是2的2次方.第n位则是2的n次方,最后结果求和

比如:111011转十进制

从后往前数

第0位     1        1*2^0=1

第1位     1        1*2^1=2

第2位     0        0*2^2=0

第3位     1        1*2^3=8

第4位     1        1*2^4=16

第5位     1        1*2^5=32

结果最后求和:1+2+0+8+16+32=59

所以二进制111011的十进制为59

总结出来的公式为:n*2^n的结果求和

原码、反码、补码

说明:在计算机中CPU操作的都是补码,原因是因为整数分负数和正数

二进制的最高位:0是正数(正符号位(最高位)为0),1是负数(负数符号位(最高位)为1)

正数的原码、补码、反码都是一样

负数的反码:按位取反,符号位不变

负数的补码:在反码的基础上加1

按位运算的二进制表现形式

按位与 :&  都为1的结果设为1

$a & $b

10 & 20

10的补码:00000000 00000000 00000000 00001010

20的补码:00000000 00000000 00000000 00010100

结果为:    00000000 00000000 00000000 00000000

转为十进制位:0

按位或:|  其中一个为1结果就为1

$a=10 $b=20

$a | $b

10的补码:00000000 00000000 00000000 00001010

20的补码:00000000 00000000 00000000 00010100

结果为:    00000000 00000000 00000000 00011110

转换为十进制:16+8+4+2+0=30

负数:

$a=-10 $b=-20

$a | $b

-10的原码:10000000 00000000 00000000 00001010
-10的反码:11111111 11111111 11111111 11110101
-10的补码:11111111 11111111 11111111 11110110

-20的原码:10000000 00000000 00000000 00010100
-20的反码:11111111 11111111 11111111 11101011
-20的补码:11111111 11111111 11111111 11101100

-10的补码:11111111 11111111 11111111 11110110

-20的补码:11111111 11111111 11111111 11101100

结果补码:  11111111 11111111 11111111 11111110

结果反码:  11111111 11111111 11111111 11111101

结果原码:  10000000 00000000 00000000 00000010

转换为十进制:-2

按位非:~  按位取反

$a=-3

~$a

-3的原码:10000000 00000000 00000000 00000011

-3的反码:11111111 11111111 11111111 11111100

-3的补码:11111111 11111111 11111111 11111101

按位非   :10000000 00000000 00000000 00000010(按位非负数符号位不变,其他取反,得到的是按位非的补码)

按位非反码:11111111 11111111 11111111 11111101

按位非原码:00000000 00000000 00000000 00000010

转为十进制:2

 

 

负数补码速算法,由最低位(右)向高位(左)查找到第一个1与符号位之间的所有数字按位取反的逆运算
10010110是补码,符号位与最后一个1之间的所有数字按位取反,得11101010

 

赞(1) 打赏
未经允许不得转载:吾爱乐享 » php学习之二进制的基础相关知识

评论 抢沙发

评论前必须登录!

 

推荐免费资源共享,个人经验总结学习

联系我们联系我们

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏