このページを編集する際は、[[編集に関する方針]]に従ってください。
*概要 [#p882ab57]
-対象:8.1.4
-言語:C
-[[postgresql-8.1.4/src/include/c.h]]にて定義

-LEN以上であるALIGNVALの倍数のうち、最小値を返す。(備考を参照)
-LEN+ALIGNVAL-1の値と、ALIGNVAL-1の値の補数の間で、ビットごとのAND演算を行い、その結果を返す。

*引数 [#ob991a32]

+ALIGNVAL : 数値または式
+LEN : 数値または式

*実装 [#jfc46648]

#define TYPEALIGN(ALIGNVAL,LEN)  \
	(((long) (LEN) + ((ALIGNVAL) - 1)) & ~((long) ((ALIGNVAL) - 1)))

*呼出元 [#tf42b347]

-[[INTALIGN()/postgresql-8.1.4]]
-[[DOUBLEALIGN()/postgresql-8.1.4]]
-[[SHORTALIGN()/postgresql-8.1.4]]

*備考 [#s788901e]

LEN以上のALIGNVALの倍数のうち最小の値を返す。

-[[ソースコードを読むだけでは意味がわからない①/解読日記]]参照

**例1:ALIGNVALが4で、LENが9の場合、 [#hc70565d]

-前半の式 (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の場合、 [#lfb358ab]

-前半の式 (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の場合、 [#r3c0e3ab]

-前半の式 (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の場合、 [#zc3e625c]

-前半の式 (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の場合、 [#i18867df]

-前半の式 (long) (LEN) + ((ALIGNVAL) - 1) = (long) (1) + ((4) - 1) = 4
-後半の式 (long) ((ALIGNVAL) - 1) = (long) ((4) - 1) = 3

前半の式と、後半の式の補数を、AND演算すると、

  4  : 00000100
 ~3  : 11111100
 AND : 00000100 = 4

-[[ソースコードを読むだけでは意味がわからない①/解読日記]]参照

*履歴 [#i7342625]
-作者:[[testnoda/ページ作者]]
-日付:2006/9/11
|更新日|更新者|更新内容|
|2006/9/23|[[testnoda:http://d.hatena.ne.jp/testnoda/about]]|概要に、命令の説明だけでなく、動作の説明を追記した。(備考に動作事例を書いて、動作を考え、説明の根拠とした)|

*コメント [#aa563454]
#comment

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS