[問題] Operator Precedence問題

看板C_and_CPP (C/C++)作者 (Lomp~*)時間16年前 (2010/02/12 00:46), 編輯推噓3(305)
留言8則, 4人參與, 最新討論串1/1
最近在看一本有關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
因為做完not之後就變成 1111 ... 1111 0101 1010
02/12 01:24, 1F

02/12 01:25, , 2F
然後sll 就變成 1111 ... 1111 0101
02/12 01:25, 2F

02/12 01:27, , 3F
也就是說 在做not之前 就已經做了extend
02/12 01:27, 3F

02/12 01:28, , 4F
嗯...打錯第二行是 srl ...
02/12 01:28, 4F

02/12 01:33, , 5F
推一下, coding時沒注意到這問題bug鐵定抓不出所以然Orz
02/12 01:33, 5F

02/12 01:58, , 6F
sar
02/12 01:58, 6F

02/12 10:33, , 7F
那如果是 unsigned char y=~x 也一樣要extend再not,
02/12 10:33, 7F

02/12 10:34, , 8F
再砍掉多餘bits,最後再assign給y嗎?
02/12 10:34, 8F
文章代碼(AID): #1BT3HibS (C_and_CPP)
文章代碼(AID): #1BT3HibS (C_and_CPP)