このページを編集する際は、編集に関する方針に従ってください。
概要 †
- LEN以上であるALIGNVALの倍数のうち、最小値を返す。(備考を参照)
- LEN+ALIGNVAL-1の値と、ALIGNVAL-1の値の補数の間で、ビットごとのAND演算を行い、その結果を返す。
引数 †
- ALIGNVAL : 数値または式
- LEN : 数値または式
実装 †
#define TYPEALIGN(ALIGNVAL,LEN) \
(((long) (LEN) + ((ALIGNVAL) - 1)) & ~((long) ((ALIGNVAL) - 1)))
呼出元 †
備考 †
LEN以上のALIGNVALの倍数のうち最小の値を返す。
例1:ALIGNVALが4で、LENが9の場合、 †
- 前半の式 (long) (LEN) + ((ALIGNVAL) - 1) = (long) (9) + ((4) - 1) = 12
- 後半の式 (long) ((ALIGNVAL) - 1) = (long) ((4) - 1) = 3
前半の式と、後半の式の補数を、AND演算すると、
12 : 00001100
~3 : 11111100
AND : 00001100 = 12
例2:ALIGNVALが4で、LENが7の場合、 †
- 前半の式 (long) (LEN) + ((ALIGNVAL) - 1) = (long) (7) + ((4) - 1) = 10
- 後半の式 (long) ((ALIGNVAL) - 1) = (long) ((4) - 1) = 3
前半の式と、後半の式の補数を、AND演算すると、
10 : 00001010
~3 : 11111100
AND : 00001000 = 8
例3:ALIGNVALが4で、LENが5の場合、 †
- 前半の式 (long) (LEN) + ((ALIGNVAL) - 1) = (long) (5) + ((4) - 1) = 8
- 後半の式 (long) ((ALIGNVAL) - 1) = (long) ((4) - 1) = 3
前半の式と、後半の式の補数を、AND演算すると、
8 : 00001000
~3 : 11111100
AND : 00001000 = 8
例4:ALIGNVALが4で、LENが4の場合、 †
- 前半の式 (long) (LEN) + ((ALIGNVAL) - 1) = (long) (4) + ((4) - 1) = 7
- 後半の式 (long) ((ALIGNVAL) - 1) = (long) ((4) - 1) = 3
前半の式と、後半の式の補数を、AND演算すると、
7 : 00000111
~3 : 11111100
AND : 00000100 = 4
例5:ALIGNVALが4で、LENが1の場合、 †
- 前半の式 (long) (LEN) + ((ALIGNVAL) - 1) = (long) (1) + ((4) - 1) = 4
- 後半の式 (long) ((ALIGNVAL) - 1) = (long) ((4) - 1) = 3
前半の式と、後半の式の補数を、AND演算すると、
4 : 00000100
~3 : 11111100
AND : 00000100 = 4
履歴 †
コメント †