[問題] 請問bit運算~使用的問題

看板C_and_CPP作者 (快樂一點嘛~)時間12年前 (2012/08/28 14:19), 編輯推噓2(2012)
留言14則, 5人參與, 最新討論串1/2 (看更多)
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) C語言@ VC 6.0 WinXP 32bit 想請問 1. if(1<~0x00000000) 和 if(1<~(~0xFFFFFFFF)) 竟然是完全不一樣的結果? 2. (~0>>1) != (0xFFFFFFFF>>1) 竟然是成立的? 為什麼呢? 先謝謝各位~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 60.250.208.98

08/28 22:40, , 1F
1. 改成 1<~(~(signed int)0xFFFFFFFF) 就可以得到 false
08/28 22:40, 1F

08/28 22:41, , 2F
2. 改成 ~0U >> 1 就不會成立
08/28 22:41, 2F

08/28 23:31, , 3F
C語言大概沒有嚴格定義十六進位處理時是否要有正負號.....
08/28 23:31, 3F

08/28 23:32, , 4F
不過這只是我的推測,詳情我不清楚。
08/28 23:32, 4F

08/29 00:06, , 5F
超過最大正整數的 hex 自然只能是 unsingned 反之 signed
08/29 00:06, 5F

08/29 00:08, , 6F
要用 unsigned hex literal 就這樣寫 0x1234U
08/29 00:08, 6F

08/29 00:32, , 7F
測試後好像是這樣! 謝謝p大^^
08/29 00:32, 7F

08/29 01:02, , 8F
好像咧…
08/29 01:02, 8F

08/29 01:04, , 9F
我好奇 short / char 有沒有 Literal ? 我沒看過 Orz
08/29 01:04, 9F

08/29 01:19, , 10F
修正字眼,驗證後的確是這樣~補充一下compiler會依據
08/29 01:19, 10F

08/29 01:21, , 11F
4byte signed=>4byte unsigned=>8byte signed=>8byte unsign
08/29 01:21, 11F

08/29 01:23, , 12F
去放置數值,所以0x7fffffff是unsigned,0x8fffffff是signed
08/29 01:23, 12F

08/29 01:24, , 13F
上一行有錯,signed/unsigned要交換
08/29 01:24, 13F

08/29 01:26, , 14F
0x8fffffffff又變成signed,因為變成8byte了
08/29 01:26, 14F
文章代碼(AID): #1GFDDkiN (C_and_CPP)
文章代碼(AID): #1GFDDkiN (C_and_CPP)