(转)怎么快速判断一个数是不是当即数,对于简单的数字咱们能够直接判断,好比小于255的数字确定是当即数。对相对复杂的数字进行判断就须要先把它转换为2进制形式,而后根据定义进行判断了。我这里总结了个比较快速的方法:spa
一、把数据转换成二进制形式,从低位到高位写成4位1组的形式,最高位一组不够四位的,在最高位前面补0。class
二、数1的个数,若是大于8个确定不是当即数,若是小于等于8进行下面步骤。循环
三、若是数据中间有连续的大于等于24个0,循环左移4的倍数,使高位全为0。 二进制
四、找到最高位的1,去掉前面最大偶数个0。方法
五、找到最低位的1,去掉后面最大偶数个0。总结
六、数剩下的位数,若是小于等于8位,那么这个数就是当即数,反之就不是当即数。数据
(1)0x4FF (2)0x122 (3)0x234 (4)0xF000000F (5)0x8000007F数字
(1) 1> 0x 0100 1111 1111
2> 1的个数大于8,不是当即数
(2) 1> 0x 0001 0010 0010
2>1的个数小于8
3>知足
4>1前面3个0,去掉最高偶数位,还有1个0 0x 01 0010 0010
5>最低位1后面1个0,故不变 0x 01 0010 0010
6>还剩10位,不知足,不是当即数
(3) 1> 0x 0010 0011 0100
2> 1的个数小于8
3>知足
4> 0x 10 0011 0100
5> 0x 10 0011 01
6>还剩8位,知足,是当即数
(4)1>0x 1111 0000 0000 0000 0000 0000 0000 1111
2>知足
3>循环左移4位 0x 0000 0000 0000 0000 0000 0000 1111 1111
4> 0x1111 1111
5>不变
6>还剩8位,知足,是当即数
(5) 1>0x1000 0000 0000 0000 0000 0000 0111 1111
2>知足
3>24个0, 则变为 0x 0000 0000 0000 0000 0000 0111 1111 1000
4> 0x 0111 1111 1000
5> 0x 0111 1111 10
6> 0x 0111 1111 10 大于8位,不是当即数
固然,最简单的写法就是: ldr r1, =xxx