推 ledia:第一種印的是 xx 吧, 如果都是印 ~x 沒可能會不一樣的 07/21 18:32
對 我打錯了orz
應該印的是xx
上面的文章改過來了|||
→ akasan:"," 很神秘 能不用盡量不要用到 你永遠不知道他的求值順序 07/21 18:40
但即使我把第一種寫法的
unsigned short int x=100,xx=~x;
改成
unsigned short int x=100;
xx=~x;
第一種寫法跑出來的結果還是65435
所以這邊應該不是,的問題|||
→ tinlans:static_cast<unsigned short>(~x) 07/21 18:41
→ tinlans:第二種寫法的 cout << 後面改這樣。 07/21 18:41
謝謝 第二種寫法 跟第一種寫法
跑出一樣的東西了!
sorry|||
是我內文打錯了|||
→ akasan:我想他第一個應該是印xx才會那樣 07/21 18:47
沒錯XD|||
※ 編輯: bookticket 來自: 140.112.125.84 (07/21 18:51)
推 zlw:很簡單,因為用函數印~x時,一定要先把x值取出後,才能做一個 07/21 18:58
→ zlw:補數運算。而xx要印的時候,編譯器知道他的資料型態是無號數 07/21 18:59
推 Fenikso:我想問題在為什麼compiler會把(~x) cast成int.. 07/21 19:05
→ Fenikso:standard有規定? 07/21 19:05
→ tinlans:這叫 promotion,~x 的 promotion 規則同 (-x) - 1。 07/21 19:11
→ tinlans:cout << sizeof(x) 和 sizeof(~x) 可以看見大小不同。 07/21 19:13
→ tinlans:-x 會把型別晉升成 signed int,所以 ~x 也會。 07/21 19:14
推 zlw:感覺這樣認定,好像CPU需要跑的指令可以比較少,是嗎? 07/21 19:15
→ tinlans:不是,單純就是 spec,附帶一提 Java 也是這樣學過去。 07/21 19:17
→ zlw:原來如此。 07/21 19:18
推 ledia:嗯 我也記得是 promotion .... 之前回的時候忘了這個詞 07/22 00:29