[問題] 一個面試考古題
題目是說不用if ?: switch 等的judgement statement
判斷a,b兩數誰比較大
看到的解答code如下
int main()
{
int a = 3;
int b = 5;
int c = a - b;
char *str[2] = {"a is bigger", "b is bigger"};
printf("unsigned is:%d\n", (unsigned)c);
printf("unsigned is:%d\n", c);
c = (unsigned)c >> (sizeof(int) * 8 - 1);
printf("%s\n", str[c]);
return 0;
}
如以上這樣是沒有問題的
但我的問題在於為什麼把黃色的unsigned拿掉之後
他就不會正常輸出了 會跑出 『?" 』
但是 印出c 和 (unsigned)c 的值都一樣是-2呀
在2's complement 中負數第一位是1
所以理應往右shift 31位後得到的數字是1
結果應該要一樣不是嗎?
請問哪裡出了問題呢?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.4.181
→
08/04 12:52, , 1F
08/04 12:52, 1F
→
08/04 13:00, , 2F
08/04 13:00, 2F
→
08/04 13:00, , 3F
08/04 13:00, 3F
→
08/04 13:12, , 4F
08/04 13:12, 4F
→
08/04 13:14, , 5F
08/04 13:14, 5F
→
08/04 13:14, , 6F
08/04 13:14, 6F
→
08/04 13:16, , 7F
08/04 13:16, 7F
→
08/04 13:17, , 8F
08/04 13:17, 8F
推
08/04 13:18, , 9F
08/04 13:18, 9F
→
08/04 13:19, , 10F
08/04 13:19, 10F
→
08/04 13:19, , 11F
08/04 13:19, 11F
推
08/04 13:29, , 12F
08/04 13:29, 12F
→
08/04 13:31, , 13F
08/04 13:31, 13F
→
08/04 13:36, , 14F
08/04 13:36, 14F
→
08/04 13:46, , 15F
08/04 13:46, 15F
→
08/04 14:02, , 16F
08/04 14:02, 16F
→
08/04 14:02, , 17F
08/04 14:02, 17F
→
08/04 14:03, , 18F
08/04 14:03, 18F
→
08/04 14:43, , 19F
08/04 14:43, 19F
→
08/04 14:44, , 20F
08/04 14:44, 20F
→
08/04 15:17, , 21F
08/04 15:17, 21F
→
08/04 15:20, , 22F
08/04 15:20, 22F
→
08/04 15:28, , 23F
08/04 15:28, 23F
→
08/04 15:29, , 24F
08/04 15:29, 24F
→
08/04 15:32, , 25F
08/04 15:32, 25F
→
08/04 15:35, , 26F
08/04 15:35, 26F
→
08/04 15:36, , 27F
08/04 15:36, 27F
→
08/04 15:47, , 28F
08/04 15:47, 28F
→
08/04 15:47, , 29F
08/04 15:47, 29F
推
08/04 18:41, , 30F
08/04 18:41, 30F
→
08/04 18:41, , 31F
08/04 18:41, 31F
→
08/04 19:00, , 32F
08/04 19:00, 32F
→
08/04 19:01, , 33F
08/04 19:01, 33F
→
08/04 19:04, , 34F
08/04 19:04, 34F
推
08/04 19:07, , 35F
08/04 19:07, 35F
→
08/04 19:08, , 36F
08/04 19:08, 36F
推
08/04 19:11, , 37F
08/04 19:11, 37F
推
08/04 19:12, , 38F
08/04 19:12, 38F
→
08/04 20:49, , 39F
08/04 20:49, 39F
→
08/04 20:50, , 40F
08/04 20:50, 40F
→
08/04 20:51, , 41F
08/04 20:51, 41F
→
08/04 20:51, , 42F
08/04 20:51, 42F
→
08/04 20:58, , 43F
08/04 20:58, 43F
→
08/04 20:58, , 44F
08/04 20:58, 44F
→
08/04 21:00, , 45F
08/04 21:00, 45F
→
08/04 21:06, , 46F
08/04 21:06, 46F
→
08/04 21:07, , 47F
08/04 21:07, 47F
→
08/04 21:07, , 48F
08/04 21:07, 48F
→
08/04 21:08, , 49F
08/04 21:08, 49F
→
08/04 21:08, , 50F
08/04 21:08, 50F
→
08/04 21:11, , 51F
08/04 21:11, 51F
→
08/04 21:12, , 52F
08/04 21:12, 52F
→
08/04 22:56, , 53F
08/04 22:56, 53F
→
08/04 22:58, , 54F
08/04 22:58, 54F
→
08/04 22:59, , 55F
08/04 22:59, 55F
推
08/06 10:22, , 56F
08/06 10:22, 56F