[問題] 新手想請教一行程式碼

看板C_and_CPP作者 (KID1412)時間9年前 (2015/03/10 16:15), 9年前編輯推噓3(3011)
留言14則, 5人參與, 最新討論串1/1
我在看一段程式碼 它是這樣寫的 *buf_p++ = (((i & 127) << 1) + 1) << 8 | (( i & 127) << 1); 我看不懂他這段程式碼的意思 想瞭解他的用意是幹嘛的 謝謝 附上這段程式碼的上下行 http://codepad.org/2R7PCqik -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.120.31.127 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1425975331.A.D28.html

03/10 17:20, , 1F
我是先看成 *buf_p++ = (((j)+1) << 8) | (j);
03/10 17:20, 1F

03/10 17:20, , 2F
*buf_p = ((i%128)*2+1)*256+(i%128)*2 + 1;
03/10 17:20, 2F

03/10 17:21, , 3F
只是我也不知它要做什麼。
03/10 17:21, 3F

03/10 17:24, , 4F
若buf_p是unsigned short *, 我猜是給初始值/測試值
03/10 17:24, 4F

03/10 17:25, , 5F
語意 可能只有撰寫者才知道 或要看上下幾行code
03/10 17:25, 5F

03/10 18:07, , 6F
這個只是把i處理一下的結果丟進16bit的上下兩組位元
03/10 18:07, 6F

03/10 18:07, , 7F
很常見的一個數組切成兩半來存資料的方法而已
03/10 18:07, 7F
※ 編輯: wayne78117 (140.120.31.127), 03/10/2015 20:20:35

03/10 21:03, , 8F
這整個迴圈是個老式的 partial loop unrolling
03/10 21:03, 8F

03/10 21:04, , 9F
若機器是 little-endian 且 ppduBuf 跟 hdrBuf 原先都是
03/10 21:04, 9F

03/10 21:04, , 10F
字元陣列的話, 迴圈執行完這個字元陣列會由 0 1 2 ... 255
03/10 21:04, 10F

03/10 21:05, , 11F
重覆填入, 看起來像是在設定什麼初始值的樣子
03/10 21:05, 11F

03/10 21:05, , 12F
不直接迴圈填字元的原因可能跟機器結構有關
03/10 21:05, 12F

03/10 21:06, , 13F
一次填 16-bit 可能會比兩次填 8-bit 來的快
03/10 21:06, 13F

03/11 08:50, , 14F
樓上專業
03/11 08:50, 14F
文章代碼(AID): #1K_gWZqe (C_and_CPP)