[問題] 新手的Macro問題

看板C_and_CPP作者 (小菊花)時間14年前 (2010/04/27 23:09), 編輯推噓5(509)
留言14則, 3人參與, 最新討論串1/2 (看更多)
不知道問這樣的問題會不會觸犯板規? 看到一個巨集是這樣寫的: _INTSIZEOF(n) ((sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1)) 不是很清楚 + sizeof(int) - 1這個值後再去對它做&的意思在哪? 有查到好像是為了對記憶體做對齊,但很難懂他的簡潔想法。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.166.212.237

04/27 23:30, , 1F
你假定n的型態為16byte, int為4 byte, 把值代進去算一遍
04/27 23:30, 1F

04/27 23:31, , 2F
再假定n的型態為15(或17等非4倍數), 再把值代進去算一遍
04/27 23:31, 2F

04/27 23:31, , 3F
應該就能推出來它是怎麼做對齊的:)
04/27 23:31, 3F

04/28 00:08, , 4F
這個我有做過,但還是不清楚它+ sizeof(int) - 1代表的實
04/28 00:08, 4F

04/28 00:08, , 5F
際動作 ioi
04/28 00:08, 5F

04/28 00:12, , 6F
嗯,應該是說我連同接下來它去& ~(同樣的值)這整個的動作
04/28 00:12, 6F

04/28 00:12, , 7F
推想不出來
04/28 00:12, 7F

04/28 00:21, , 8F
那簡單點好了, 假如要你寫一個 int func(int x); 能回傳
04/28 00:21, 8F

04/28 00:21, , 9F
>=x的最小的4的倍數, 你會怎麼做:)
04/28 00:21, 9F

04/28 00:24, , 10F
對了, 只能數學計算, 不能用if/loop/其他外部函數做XD
04/28 00:24, 10F

04/28 00:38, , 11F
對不起, 好像有點繞遠路, 直接回好了Orz
04/28 00:38, 11F

04/28 00:54, , 12F
你是要問 & 和 ~ 的動作嗎?前者是bit運算的 And
04/28 00:54, 12F

04/28 00:59, , 13F
後者是取補數 <-- 有點誤. 因為這裡是反求補數
04/28 00:59, 13F

04/28 01:07, , 14F
~其實就是bit-wise的not, 印象中相當於取1's補數:)
04/28 01:07, 14F
文章代碼(AID): #1BrlumaP (C_and_CPP)
文章代碼(AID): #1BrlumaP (C_and_CPP)