所以正負數的換算可以用:
負數 + 2 ^ x = 正數
正數 - 2 ^ x = 負數
x表示bit數。
以8為一個單位31~24、23~16、15~8、7~0,
轉成7~0、15~8、23~16、31~24的形式即可。
先判斷正負值再做運算,運算後判斷正負值,就可以輸出了。
神人解法
/* ACM 594 One Little, Two Little, Three Little Endians * mythnc * 2012/01/11 14:19:06 * run time: 0.008 */ #include <stdio.h> #include <string.h> #define MAX 32 int convert(int); int main(void) { int x; while (scanf("%d", &x) == 1) printf("%d converts to %d\n", x, convert(x)); return 0; } /* convert: convert x to different endian system */ int convert(int x) { int endian[MAX]; int i, mul; memset(endian, 0, sizeof(endian)); if (x < 0) { endian[7] = 1; x += 2147483647; x++; } i = 24; while (x) { endian[i++] = x % 2; x /= 2; if (i % 8 == 0) i -= 16; } for (i = x = 0, mul = 1; i < MAX - 1; i++, mul *= 2) x += mul * endian[i]; if (endian[i] == 1) { x -= 2147483647; x--; } return x; }
沒有留言:
張貼留言