(轉)怎麼快速判斷一個數是不是當即數,對於簡單的數字咱們能夠直接判斷,好比小於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