PostgreSQL解読室:
TYPEALIGN()/postgresql-8.1.4
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
このページを編集する際は、[[編集に関する方針]]に従ってく...
*概要 [#p882ab57]
-対象:8.1.4
-言語:C
-[[postgresql-8.1.4/src/include/c.h]]にて定義
-LEN以上であるALIGNVALの倍数のうち、最小値を返す。(備考...
-LEN+ALIGNVAL-1の値と、ALIGNVAL-1の値の補数の間で、ビット...
*引数 [#ob991a32]
+ALIGNVAL : 数値または式
+LEN : 数値または式
*実装 [#jfc46648]
#define TYPEALIGN(ALIGNVAL,LEN) \
(((long) (LEN) + ((ALIGNVAL) - 1)) & ~((long) ((ALIGNVAL...
*呼出元 [#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) + ...
-後半の式 (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) + ...
-後半の式 (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) + ...
-後半の式 (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) + ...
-後半の式 (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) + ...
-後半の式 (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/abou...
*コメント [#aa563454]
#comment
終了行:
このページを編集する際は、[[編集に関する方針]]に従ってく...
*概要 [#p882ab57]
-対象:8.1.4
-言語:C
-[[postgresql-8.1.4/src/include/c.h]]にて定義
-LEN以上であるALIGNVALの倍数のうち、最小値を返す。(備考...
-LEN+ALIGNVAL-1の値と、ALIGNVAL-1の値の補数の間で、ビット...
*引数 [#ob991a32]
+ALIGNVAL : 数値または式
+LEN : 数値または式
*実装 [#jfc46648]
#define TYPEALIGN(ALIGNVAL,LEN) \
(((long) (LEN) + ((ALIGNVAL) - 1)) & ~((long) ((ALIGNVAL...
*呼出元 [#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) + ...
-後半の式 (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) + ...
-後半の式 (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) + ...
-後半の式 (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) + ...
-後半の式 (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) + ...
-後半の式 (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/abou...
*コメント [#aa563454]
#comment
ページ名: