[問題] 關於C的bitwise OR

看板C_and_CPP (C/C++)作者 (fish)時間12年前 (2014/02/21 19:28), 編輯推噓4(4011)
留言15則, 10人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) GCC 問題(Question): 關於C的bitwise OR 不是很懂為什麼不能這樣用(會compile error) 還是說這樣的情形就是要用memcpy去做呢? 程式碼(Code):(請善用置底文網頁, 記得排版) ... float f = 0.75; unsigned int k = 0xffffffff; k = f|k; ... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.167.228.223

02/21 19:36, , 1F
| 整數才能用的運算子
02/21 19:36, 1F

02/21 19:53, , 2F
那如果只想修改float中某幾個bit有沒有什麼直接的方法?
02/21 19:53, 2F

02/21 20:06, , 3F
k = (unsigned int)f | k; ?
02/21 20:06, 3F

02/21 20:13, , 4F
先問原 PO 你想做什麼?
02/21 20:13, 4F

02/21 20:14, , 5F
沒辦法 f會直接被轉換成整數的0 然後我發現我弄錯了要&才對
02/21 20:14, 5F

02/21 20:16, , 6F
就 展示出float point在記憶體裡面的二進制表示
02/21 20:16, 6F

02/21 20:39, , 7F
union
02/21 20:39, 7F

02/21 22:07, , 8F
一種是用 union, 一種是 unsigned * uf = (unsigned*)&f;
02/21 22:07, 8F

02/21 22:08, , 9F
對 *uf 做運算 .
02/21 22:08, 9F

02/21 22:34, , 10F
Union 比較好, 指標轉型一眼看去就很像是 bug XD
02/21 22:34, 10F

02/21 22:51, , 11F
嗯.. 不過諷刺的是,部份 compiler 用 union 速度較慢 XD
02/21 22:51, 11F

02/21 23:23, , 12F
用or那不是每個bit都變成,1了?
02/21 23:23, 12F

02/22 00:47, , 13F
有發現弄錯了 要換成&
02/22 00:47, 13F

02/22 18:22, , 14F
先轉 void * 再轉成一樣大小的 unsign 整數指標
02/22 18:22, 14F

02/24 17:55, , 15F
以前把他傳到函數裡,用void *接進來再轉,再or。
02/24 17:55, 15F
文章代碼(AID): #1J1pX2Af (C_and_CPP)
文章代碼(AID): #1J1pX2Af (C_and_CPP)