將一個16進位制的數的二進位制位反序
阿新 • • 發佈:2018-12-29
這是昨天晚上某號稱中國創新力最強的應用層網路裝置供應商的一題筆試程式設計題。題目看似簡單,總的來說吧,會的人不難,不會的人無從下手。題目如下:
題目:
程式如下:編寫函式reverse(),將val(32位無符號整數)的二進位制位反序。比如,如果val的二進位制表示為1011000011111111,反序後的val的二進位制表示為 1111111100001101.
輸入描述:16進位制的一個無符號數。 輸出描述:16進位制的一個無符號數
#include <stdio.h> #include <string.h> unsigned int reverse(unsigned int num) { int y = 0; for (int i = 0; i < 8 * sizeof(num); i++) { y = y << 1 | num & 1; num >>= 1; } return y; } int main(int argc, char *argv[]) { unsigned int num = 0; unsigned int ret = 0; if (1 != fscanf(stdin, "0x%x", &num)) { fprintf(stderr, "input error\n"); return 0; } ret = reverse(num); printf("%08x\n", ret); return 0; }
如果輸入 :0x1,則輸出 80000000
說明:主要功能在reverse()函式實現。核心的地方就在一個for()迴圈