#define rt_align(size,align) (((size) + (align) -1) & ~((align) - 1)
//指定寬度對齊
#define rt_align_down(size,align) ((size)&~((align)-1))
//指定寬度向下對齊
上面那個是指定寬度對齊 例如rt_align(13,4)會返回16
下面是向下對齊 例如 rt_align(13,4)會返回12
可是為什麼會這樣?
如果按照十進位制的思路,我們的做法可能會是這樣子。
unsigned
intrt_align
(size,align)
但是使用巨集定義的做法,思路又是怎麼樣的呢?
首先看這個&~運算子到底是什麼含義。
對於乙個二進位制數字。
進行非運算後,0變1,1變0。
進行與運算後,0與任何數都是0。
知道了與非運算的概念後,來對四位元組對齊進行特殊化的分析。
假設現在 size=15,align=4,我們做((size)&~((align)-1)) 會是什麼結果呢?
運算過程如下:bin為二進位制數,dec為10進製數。
15 &~ (4-1) = 15 &~ 3 =(bin) 1111 &~ 0011 = 1100 = (dec) 12
我們可以看出,對於乙個數字 &~ 3 ,就是把它的後兩位清零,乙個數後兩位被清零後,肯定是可以被4整除的,也就完成了四位元組對齊。
如果假設 size=16,align=3,現在我們要做乙個三位元組對齊。
16 &~ (3-1) =(bin)10000&~0010 = 10000 =16
很明顯,並沒有完成三位元組對齊,也就是說這個巨集定義不能進行任意位元組的對齊。不過我們一般都是四位元組對齊八字節對齊,所以不能進行三位元組對齊,七位元組對齊,並沒有什麼影響。
應該是只有 1,2,4,8,16這種2的n次方才能用這個進行位元組對齊。
關於使用fixed布局出現無法指定寬度的問題
在使用table layout fixed 布局時 當第一行為合併單元格時,第二行及以下行設定的寬度不再生效 而是平均分成合併單元格數 如圖所示 1 此設定下td的寬度不受內容決定,如果首行所有td都未顯式設定寬度,則table會盡可能地將每列的寬度平均分,首行以後的其他行設定的td寬度不會生效 2...
CSS設定超出指定寬度自動換行
一 背景 最近專案中有用到在div中顯示使用者反饋的資訊,是指定寬度的div,超出要自動換行,開始寫好後感覺應該沒什麼問題,後來自己隨便輸入測試資料的時候發現 如果是純字母或者是純數字就會出現超出了也不會自動換行的問題,甚是無解,後經過努力,已經完美解決,下面來介紹解決方式。二 解決方式 對於div...
CSS設定超出指定寬度自動換行
一 背景 最近專案中有用到在div中顯示使用者反饋的資訊,是指定寬度的div,超出要自動換行,開始寫好後感覺應該沒什麼問題,後來自己隨便輸入測試資料的時候發現 如果是純字母或者是純數字就會出現超出了也不會自動換行的問題,甚是無解,後經過努力,已經完美解決,下面來介紹解決方式。二 解決方式 對於div...