關於指定寬度對齊和指定寬度向下對齊

2021-10-09 14:55:33 字數 1014 閱讀 5700

#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...