高低位交換
Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other)
Total Submission(s) : 78 Accepted Submission(s) : 56
Font: Times New Roman | Verdana | Georgia
Font Size: ← →
Problem Description
給出一個小於2^32的正整數。這個數可以用一個32位的二進制數表示(不足32位用0補足)。我們稱這個二進制數的前16位為“高位”,后16位為“低位”。將它的高低位交換,我們可以得到一個新的數。試問這個新的數是多少(用十進制表示)
例如,數1314520用二進制表示為0000 0000 0001 0100 0000 1110 1101 1000(添加了11個前導0補足為32位),其中前16位為高位,即0000 0000 0001 0100;后16位為低位,即0000 1110 1101 1000。將它的高低位進行交換,我們得到了一個新的二進制數0000 1110 1101 1000 0000 0000 0001 0100。它即是十進制的249036820。
例如,數1314520用二進制表示為0000 0000 0001 0100 0000 1110 1101 1000(添加了11個前導0補足為32位),其中前16位為高位,即0000 0000 0001 0100;后16位為低位,即0000 1110 1101 1000。將它的高低位進行交換,我們得到了一個新的二進制數0000 1110 1101 1000 0000 0000 0001 0100。它即是十進制的249036820。
Input
一個小於2^32的正整數N
Output
高低位交換后的正整數
Sample Input
1314520
Sample Output
249036820
分析:
用位運算就可以解決問題了。
1 #include<stdio.h> 2 int main() 3 { 4 long int a; 5 scanf("%ld",&a); 6 a=((a&65535)<<16)+((a&4294901760)>>16); 7 printf("%ld\n",a); 8 return 0; 9 }
