[問題] 位元運算子

看板C_and_CPP (C/C++)作者時間16年前 (2010/03/23 23:52), 編輯推噓3(308)
留言11則, 4人參與, 最新討論串1/1
/*(Visual C++)*/ #include "stdafx.h" #include <iostream> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { unsigned short test = 20577; cout << ((test << 15) >> 15) << endl; return 0; } 20577 = 0101000001100001 我認為出來的數值應該是1 為什麼他出來的數值卻是是20577呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.116.101.127

03/23 23:56, , 1F
sizeof(unsigned) = ?
03/23 23:56, 1F
※ 編輯: viker 來自: 140.116.101.127 (03/23 23:59)

03/24 00:00, , 2F
抱歉漏打了
03/24 00:00, 2F

03/24 00:06, , 3F
20577 明明是奇數 最後一個bit怎麼會是0?
03/24 00:06, 3F

03/24 00:08, , 4F
原PO的問題我也遇過
03/24 00:08, 4F

03/24 00:08, , 5F
(((unsigned short)(test << 15)) >> 15)
03/24 00:08, 5F

03/24 00:09, , 6F
印象中, shift的時候會把operand隱式轉形成
03/24 00:09, 6F

03/24 00:09, , 7F
中間可以改成這樣
03/24 00:09, 7F

03/24 00:09, , 8F
int / unsigned int; 只是忘了在哪看到要查一下....
03/24 00:09, 8F
※ 編輯: viker 來自: 140.116.101.127 (03/24 00:16)

03/24 00:21, , 9F
小弟我錯了, 那好像不叫隱式轉形, 是int promotion..Orz
03/24 00:21, 9F

03/24 00:21, , 10F
改成像tab講的那樣的確就可以了 不過是為什麼呢
03/24 00:21, 10F

03/24 00:25, , 11F
我不清楚 可能跟V大想表示的是一樣的
03/24 00:25, 11F
文章代碼(AID): #1BgEEtzw (C_and_CPP)
文章代碼(AID): #1BgEEtzw (C_and_CPP)