[問題] C #define function question
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
VC++
問題(Question):
最近在看怎麼控制 SATA device 的code.
下面把ALIGNED_ADDR(base, AlignUnit) 定義為後面那串實在難懂.
故上來請教各位大神們. 麻煩幫忙小弟解惑一下.3Q
/*==========================================================
IDE/SATA device access function implementation
===========================================================*/
#define ALIGNED_ADDR(base, AlignUnit) \
(PVOID)(((int)(base)+(AlignUnit))&~((AlignUnit)- 1))
餵入的資料(Input):
NA
預期的正確結果(Expected Output):
NA
錯誤結果(Wrong Output):
NA
程式碼(Code):(請善用置底文網頁, 記得排版)
補充說明(Supplement):
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.137.22.105
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1447771987.A.170.html
推
11/17 23:08, , 1F
11/17 23:08, 1F
→
11/17 23:09, , 2F
11/17 23:09, 2F
(AlignUnit))&~((AlignUnit)- 1 再請教一下這邊的"&~"是甚麼意思呢?
位甚麼後面要再減1呢? 另外照您舉例的意思,如果AlignUnit是0x10 的話也會對齊
16B是嗎?
※ 編輯: hibiscus520 (220.137.22.105), 11/17/2015 23:42:31
推
11/17 23:59, , 3F
11/17 23:59, 3F
→
11/17 23:59, , 4F
11/17 23:59, 4F
→
11/18 00:00, , 5F
11/18 00:00, 5F
→
11/18 00:06, , 6F
11/18 00:06, 6F