这个程序,应该是为了将一个int类型转换成32位2进制数。
原理:
1. <<:左移运算符,在没有数字溢出的情况下,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方。
2. &:位运算符,当两边 *** 作数的位同时为1时,结果为1,否则为0。如111 &101 = 101。
切入正题:
1. 为了取得32位完整的二进肆此盯制数,需要循环32次,1<<31即2的31次方,表示最高位为1,其余31位均为0的二进制数;1<<30即2的30次方,表示第二位裂和为1,其余31位均为0的二进制数;以此类推。
2. 程序从高位开始转换int类型,我们想要截取二进制数的特定某位时,我们需要用一个此位为1,其余位均为0的二进制数来做&运算,例如,我扒差们想截取15的最高位,我们只需使用最高位为1的32位二进制数与15做&运算即可。因为假设假设某位为1,1 &1 = 1,假设某位为0,0 &1 = 0,均能得到原来的数。而1或0与0相与均为0.
总之,程序是从高位到低位依次一位一位截取int对应二进制数,输出的结果便是int对应的二进制数
sbit P1_7=P1^7//需要先声明各个位引脚,因为C语言不能直接给P1.7幅值sbit P1_6=P1^6
sbit P1_5=P1^5
sbit P1_4=P1^4
sbit P1_3=P1^3
pp=pp<<6 //整型变量16位,移动6位,让最高位到D15位置
if(pp&0x8000) P1_7=1 //最高位幅值给P1.7
else P1_7=0
pp=pp<<1 //左移一位,让次高位到最高位位置
if(pp&0x8000) P1_6=1 //次高位赋值给P1.6
else P1_6=0
pp=pp<<1 /袜纤/左答纤移一位,让次高位到最高位位置
if(pp&0x8000) P1_5=1 //依次类推P1_5,P1_4.......
else P1_5=0
pp=pp<<1 //左移一位,让次高位到最高位位置
if(pp&0x8000) P1_4=1 //依次类推清好仿P1_4.......
else P1_4=0
pp=pp<<1 //左移一位,让次高位到最高位位置
if(pp&0x8000) P1_3=1 //依次类推P1_3.......
else P1_3=0
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)