[問題] Operator Precedence問題
最近在看一本有關c語言程式問題集的書,看到以下這題:
-----------------------------
unsigned char x = 0xA5;
unsigned char y = ~x >> 4;
printf("%d\n",y);
-----------------------------
我的想法是:
x = 0xA5 = (1010 0101) //unsigned char 為 1 byte
根據Operator Precedence先做 ~ ,
所以 ~x = (0101 1010)
最後再做 >> ,不過因為>>的規定是要integer,
所以先將(0101 1010)轉成int,變成(0000..... 0101 1010) //int為4 bytes
然後再做 >> 4,所以就變(0000..... 0000 0101)
最後指定給y,但因為y是unsigned char,所以將前面多出來的bits都砍掉,
變成(0000 0101) = 0x05 = 5
可是程式run出來的結果卻是245 (Linux, GCC 4.3.3)
不知道以上的想法哪邊出了問題?感覺上好像要先做 >> 的樣子?
因為查了幾本有關c語言的書講Operator Precedence這邊,
~ 的優先權都是比 >> 還高。
煩請板上大大幫忙解答 Orz...
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 125.229.249.36
推
02/12 01:24, , 1F
02/12 01:24, 1F
→
02/12 01:25, , 2F
02/12 01:25, 2F
→
02/12 01:27, , 3F
02/12 01:27, 3F
→
02/12 01:28, , 4F
02/12 01:28, 4F
推
02/12 01:33, , 5F
02/12 01:33, 5F
推
02/12 01:58, , 6F
02/12 01:58, 6F
→
02/12 10:33, , 7F
02/12 10:33, 7F
→
02/12 10:34, , 8F
02/12 10:34, 8F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章