ちょっとしたテクニークスレッド
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。
NGNGを
if( 1 == hogehoge )
と書くと、イコールが一個しかなかったときエラーに
なってくれる。
#罵倒をおそれずかきこめー
0002>1
NGNG0003名無しさん@お腹いっぱい。
NGNG0004名無しさん@お腹いっぱい。
NGNG>#罵倒をおそれずかきこめー
だけ書いて
2に内容書けばよかったのに・・・
struct hoge {
char *ptr;
char str[1];
};
C++だと使いにくいが…
0005名無しさん@お腹いっぱい。
NGNGstruct hoge{
char *ptr;
char str[0];
}
が出きるから、それに慣れてたせいでgccに移植するときに泣いたことが…
0006名無しさん@お腹いっぱい。
NGNGそれって何に使うんですか?純粋に知りたいです。
00074
NGNG例えば、文字列のリスト構造を実現する場合に
リストを実現する構造体と、文字列を記憶する配列分の
2回、mallocを呼ぶ必要がある。
ところが、4の形式、つまり構造体の最後のメンバにchar[1]があると、
p = malloc(sizeof(struct hoge)+strlen(s));
strcpy(p->str@` s);
という技が使える。
利点はmallocの呼び出し回数が減らせるため、
記憶領域的にも速度的にも有利になる。
もちろん、charに限らず、
「不定長の領域を本体とは別に確保する必要がある場合」に、
使う事が出来る。
00081
NGNGあげ
0009>6
NGNGの時に使います。
とくに、生成から消滅までの間固定長だけど、モノによってデータサイズが違う
ときに有効です。
0010名無しさん@お腹いっぱい。
NGNGif ( ((c >= 0x81) && (c <= 0x9F)) || ((c >= 0xE0) && (c <= 0xFC)) )
のかわりに
if ( (c >= 0x81) && ( (c <= 0x9F) || ((c >= 0xE0) && (c <= 0xFC)) ) )
の方が、多くの場合速度が速いコードが作れ、オーバーヘッドもほとんどない。
括弧が多いのは、今書いたからなんで、かんべん。
0011このスレおもしろいかも
NGNGi := (i - 1) * (-1) + 2;
{
if i = 1 then
i := 2
eles
i := 1;
}
2つもコメントを入れてしまった俺は根性なし・・・
0012名無しさん@お腹いっぱい。
NGNG2つ以上の範囲の判定なら、いつでも使えそうですね。
0013名無しさん@お腹いっぱい。
NGNGCombo1.AddItem リスト項目
とやる。
が、この項目がうん百件とある場合(データベースから拾ってくる等)
AddItemでは偉く時間がかかってしまう。
そこで、APIを使うと速度が向上する。
こんな感じだ。
あらかじめ、Option Explicitで以下のように宣言しておく。
Private Declare Function SendMessage Lib "user32" _
Alias "SendMessageA" _
(ByVal hwnd As Long@` _
ByVal wMsg As Long@` _
ByVal wParam As Long@` _
ByVal lParam As Any) As Long
で、実際の処理部分は、
自分の場合DBにオラクルを使ったので、
Dim ret As Long
Dim cbHwnd As Long
Dim cbitem As String
Dim SQL_TEXT As String
cbHwnd = Combo1.hwnd
Combo1.Clear
SQL_TEXT = "select hoge from TB_hoge "
SQL_TEXT = SQL_TEXT & "where code = 'hoge'"
SQL_TEXT = SQL_TEXT & " ORDER BY hoge"
Set OraDs = OraDatabase.CreateDynaset(SQL_TEXT@` ORADYN_READONLY)
OraDs.MoveFirst
Do Until OraDs.EOF
cbitem = OraDs![hoge] & vbNullString
ret = SendMessage(cbHwnd@` CB_ADDSTRING@` 0@` cbitem)
OraDs.MoveNext
Loop
といった感じになる。
かなりスピードアップするハズ。
お試しアレ。
sendmessageは奥深いよ……。
0014名無しさん@お腹いっぱい。
NGNG#define SWAP(a@`b) (a^=b@`b^=a@`a^=b)
0015>11
NGNGでええんとちゃうの?
BASIC時代にはしょっちゅう使ったテクだが。
0016名無しさん@お腹いっぱい。
NGNGつーか、それって3-i
0017名無しさん@お腹いっぱい。
NGNGprintf("%0*d\n"@` 4@` 123 );
00186
NGNGなるほど〜。
WinAPIでパレットいじるときのあれみたいなものですね〜。
どうもありがとうございました。
0019>13
NGNGCOMBOやMSFLEXGRIDなんかは
Combo1.Visible = False
処理
Combo1.Visible = True
とするとオーバーヘッドが発生するはずなのになぜかかなりの高速化になる。
0020名無しさん@お腹いっぱい。
NGNGPUSH DE
POP BC
0021名無しさん@お腹いっぱい。
NGNGCBW
0022>20
NGNGmov c@` e
でいいと思うんだけど。なぜにスタックを使う?
メモリを介さない分、速いだろうとおもうのですが。
002320
NGNG??言われてみれば、そうだな……。Z80の話だからなあ。
よく覚えてねえや。
じゃあ、これでどうだ
XCHG BC DE を実現する
PUSH BC
PUSH DE
POP BC
POP DE
0024名無しさん@お腹いっぱい。
NGNG{
if(c>=0x81)
{
if(c<=0x9F)
return 1;
else
{
c += 0x20;
if(c <= 0x1C)
return 1;
}
}
return 0;
}
こう言うのはやっぱり無駄な努力なんでしょうか。
0025!=22
NGNG0027!=22@`25
NGNGだから、スタックは使わない方が基本的に速い。
23のはAレジスタ使わないなら
PUSH BC
LD B@`D
LD C@`E
POP DE
あたりで妥協かな。
0028名無しさん@お腹いっぱい。
NGNG0029名無しさん@お腹いっぱい。
NGNG逆の意味で常識。
SWAP(x@` x);
とした場合、何が起こる?
0030名無しさん@お腹いっぱい。
NGNGint a = 0;
a = 1 - a;
すげーだろー。
0031名無しさん@お腹いっぱい。
NGNGa^=1; でええやん。
0032名無しさん@お腹いっぱい。
NGNG更に親指はクリトリスを責める!
0033名無しさん@お腹いっぱい。
NGNGfor (int i = N - 1; i >= 0; --i) {
...
}
みたいに判定を0で行うとほんの少し速くなるかも
#こんなこと気にしながらプログラム書きたくないけど・・・
0034ミトコンドリ子
NGNGfor ( int i=N ; --i >= 0 ; ) {...}
Nの表記が長いときに -1 が紛らわしくならないからよ。
0比較のため、というよりはインデックス逆巡回を書くときの
イディオムよね。
0035名無しさん@お腹いっぱい。
NGNG境界判定のための比較が要らなくなるか、
って、アセンブラなら減産して0だった時点でZeroフラグ立つよね。
Cって、
オプティマイズされたオブジェクトなら、意外な方法で高速にしたりするんで、意味無し!
003633
NGNG>for ( int i=N ; --i >= 0 ; ) {...}
あ、、、きれい・・・いただきます:-)
>0比較のため、というよりはインデックス逆巡回を書くときの
>イディオムよね。
んーでも、比較すべき数値をレジスタにロードしなくて良い分
速いかなぁと・・・CPUによりけりですけど。
おまじないのように上記のようにがんばって書いてました。
「もうちょっと速くなりますように」とお祈りしながら・・・
003733
NGNG>Cって、
>オプティマイズされたオブジェクトなら、意外な方法で高速にしたりするんで、意味無し!
いや、先の例で、Nが変数のときには
for (int i=0; i < N; ++i) {...}
で、比較部分がほんのちょこっとだけ最適化あまくなるようなきがしません?
まあ、目に見えて速くなるわけではないですが、
藁にもすがりたいときにはおまじないとしてやってます。。。
だめっすかねぇ・・・
0038名無しさん@お腹いっぱい。
NGNGfor ( int i=N ; i-- ; ) {...} でも可?
0039名無しさん@お腹いっぱい。
NGNGy+=(button==UP)-(button==DOWN);
(;´Д`)
0040名無しさん@お腹いっぱい。
NGNGここの人はアセンブラとかにも詳しいのかな?
便乗質問させてください。
for(int i=N; --i;){}
と
int i=N;
while(i--){}
ではforの方が早くなるんですか?
最適化のあまりよろしく無いコンパイラ(あまり最適化に頼るのもなんなので)
普通程度の最適化がなされるコンパイラ(今時のコンパイラならそのぐらい基本的みたいな)
の両方のケースで教えてください。
0041名無しさん@お腹いっぱい。
NGNG何故自分で確かめない?
0042名無しさん@お腹いっぱい。
NGNG(;´Д`)
0043名無しさん@お腹いっぱい。
NGNGループ回数違うような・・・
あと、iが0になったかどうかだけで判定してますが
Nが負で渡ってきちゃったときとか不安・・・
iのスコープも違ってるし・・・
スピードは同じっぽそう。逆アセンブルして確かめよう。
0044名無しさん@お腹いっぱい。
NGNGアゲてるやつはみんな白痴。
0045名無しさん@お腹いっぱい。
NGNG0046名無しさん@お腹いっぱい。
NGNGあなたは、そんなこと聞いてどうするの?
0047名無しさん@お腹いっぱい。
NGNG....;
if(int d=a-b)
{
d+=...;
c+=d;
}
(;´Д`)
0048名無しさん@お腹いっぱい。
NGNG0049名無しさん@お腹いっぱい。
NGNGたのしぃでぇ〜す。
酔っぱらい関数きぼん。
0050名無しさん@お腹いっぱい。
NGNGnビットのマスク生成
(1 << n) - 1;
0051名無しさん@お腹いっぱい。
NGNGあげちゃえ!
0052名無しさん@お腹いっぱい。
NGNGではなく
xra a
とすると1バイトで済む
メモリを0(等)で埋める歳にはpushを使うと速い
dadで16bitの引き算をするには…
bcとdeをxchgしたい時には…
は当たり前の事か
0053名無しさん@お腹いっぱい。
NGNG…;
(light0?Enable:Disable)(LIGHTING);
(;´Д`)
0054名無しさん@お腹いっぱい。
NGNGSBB AL@`69h
DAS
5バイトの1桁16進バイナリ−ASCII文字変換。
有名だねー。
0055名無しさん@お腹いっぱい。
NGNG文字列変数に入れてVARPTR()の値を参考に絶対アドレスの部分を書き換える
って何の話だ
0056名無しさん@お腹いっぱい。
NGNGSJIS2JIS PROC
sub al@`71h
and al@`3Fh
stc
rcl al@`1
cmp ah@`7Fh
cmc
sbb ah@`1Fh
cmp ah@`7Fh
jc @skp
inc ax
sub ah@`7Fh-21h
@skp:
xchg al@`ah
ret
SJIS2JIS ENDP
0057名無しさん@お腹いっぱい。
NGNGtypedef struct { BYTE stuff[100]; } BYTE100;
*(BYTE100*)px = *(BYTE100*)py; //memcpy(px@`py@`100)と同じ?
0058名無しさん@お腹いっぱい。
NGNGよかったらJIS2SJISも書いてくださ〜い。
0059名無しさん@お腹いっぱい。
NGNG#define BITon(b@`c) ((c) = ((c)|(0x01<<(b))))
#define BIToff(b@`c) ((c) = (~(~(c)|(0x01<<(b)))))
ダサイ???
0060名無しさん@お腹いっぱい。
NGNGc++ を無意識に使う怖さから、inline にしたほうがいいと思うが。
0061名無しさん@お腹いっぱい。
NGNG6809版
ADDA #$90
DAA
ADCA #$40
DAA
6バイト
0062名無しさん@お腹いっぱい。
NGNG#define BIT_Reverse(b@`c) ((c)=(c)^(1<<(b)))
0063名無しさん@お腹いっぱい。
NGNG0064名無しさん@お腹いっぱい。
NGNGしょうがねぇじゃん。ここに書いてる奴はみんなレベル低いんだから。
0065名無しさん@お腹いっぱい。
NGNG逝ってやらん
0066名無しさん@お腹いっぱい。
NGNG0067名無しさん@お腹いっぱい。
NGNG0068名無しさん@お腹いっぱい。
NGNGうーん、こんなのは?
望んだ結果が出ないかもしれんけど。
006968
NGNG0070名無しさん@お腹いっぱい。
NGNG0071名無しさん@お腹いっぱい。
NGNG0072>70
NGNGでも、その前の段階でyがゼロにならないよう管理すべきだと思ってたから
こんな事はやったことないな。逆に原因不明にするだけじゃん。
0073名無しさん@お腹いっぱい。
NGNG007470
NGNGオレも72の言うとおりこのマクロの使用では原因不明になるだけじゃないのか
と思う。
でもこういう形で記述すると上手く解決できる問題分野があり、それを
オレが知らないだけかとも思ったワケ。
そこらへん、どうよ >>68
#行列の特異値分解かなにかで 1/ε -> 0 (εは非常に小さい正数)と
置き換える場合とかがあった気がする。でもその場合はこのマクロは
使えないとも思う。
0075名無しさん@お腹いっぱい。
NGNG0x7777とか、0x33333?とか使うやつあったっしょ
あれってどーゆーのだっけ?
0076名無しさん@お腹いっぱい。
NGNGそこまで分かってるなら自分で検索すれ!
http://www.st.rim.or.jp/~phinloda/cqa/cqa15.html
007775
NGNG0078名無しさん@お腹いっぱい。
NGNG避けるために多用したりすることってないの?>制御分野のお方。
0079>78
NGNG複雑になりそうな場合マクロをやめて関数にしてpragmaでinline化します。
移植性は下がるけど、可読性のほうが大事なので。
0080名無しさん@お腹いっぱい。
NGNGinlineできないのがあります。
0081名無しさん@お腹いっぱい。
NGNG0082>78
NGNG0083ななしさん@目立ちたがりの厨房
NGNG通常、
/*
....
*/
と書くが、
/*
....
//*/
と、コメントアウトしておくと、
//*
....
//*/
と、最初の一行に'/'一個追加するだけで、"...."の行が有効になる。
デバッグの時にちょっと便利。
0084名無しさん@お腹いっぱい。
NGNG0085名無しさん@お腹いっぱい。
NGNGちなみにどんなキーワードで見つけたの?すごい
0086吾輩は名無しさんである
NGNG/**/を書いときます。
0087名無しさん@お腹いっぱい。
NGNG頼むからやめてくれ。
008868じゃないけど
NGNGもちろん、y=0にならないように書くのが正しいんだけど、仕事でゲームの
開発をしていると、最悪でも例外がおきないようにしておくのはわりと
大事だったりします。
# ハングるよりは変な場所に表示される方がマシってこと。
008968
NGNGまあこれは 88 の言うように許容できる場合に限るので今考えると特殊な部類に入るかもね…
返す値を 0 じゃなくて自作関数で説明入りエラー吐くようにしておけば 0 割りのトラップもしやすいかもね。
0090名無しさん@お腹いっぱい。
NGNGエラー処理の存在自体が許容できないわけです。ゲームでは。
0091名無しさん@お腹いっぱい。
NGNGtypedef で一度にポインタも定義出来ます
例:
typedef struct { なんとかかんとか} HOGE@`*PHOGE;
0092名無しさん@お腹いっぱい。
NGNGtypedefの書式は、識別子の宣言とおなじだからね。
0093名無しさん@お腹いっぱい。
NGNGc には英文字が入ってると思いねぇ
char to_upper(char c) {
return c & ~0x20;
}
0094名無しさん@お腹いっぱい。
NGNGconst PHOGE
ってやってハマる奴がたまにいる。
0095>>93
NGNG0096Dr.URI
NGNGtypedef struct{
unsigned int Value : 2;
} ROTATE;
void FuncA()
{
ROTATE st;
unsigned int p;
st.Value = 0;
int i;
for (i = 0; i < 10; i++)
{
p = st.Value++;
printf("%d\n"@` p);
}
}
0097名無しさん@お腹いっぱい。
NGNG#define FLAG_ON( NUM@` FLAG) NUM |= (NUM ^ FLAG)
#define FLAG_OFF( NUM@` FLAG) NUM ^= (NUM & FLAG)
いまどきフラグなんてせこい使い方しないか?
0098ビット操作を最近覚えた人
NGNG結構便利なんですが、、、
例えばゲームの毒、混乱、眠りなどの状態を表すとか。
0099名無しさん@お腹いっぱい。
NGNGの方が好みだ。
0100名無しさん@お腹いっぱい。
NGNG0101ビット"猿"Zよか
NGNG0102名無しさん@お腹いっぱい。
NGNG俺もビットフィールド使うなぁ…
0103虹
NGNGフラグとかをビットフィールトで、
struct {
int a:1;
int b:1;
} flag;
とかで定義した場合、すべてを0でクリアするとき、
*(int *)&flag=0;
とか書いてるんですけど、もっとエレガントな方法はないでしょうか?
i
0104名無しさん@お腹いっぱい。
NGNGUNION使っとけ!
0105名無しさん@お腹いっぱい。
NGNG0106名無しさん@お腹いっぱい。
NGNG0107名無しさん@お腹いっぱい。
NGNG4つの8ビットに加算したとき、ループせずに 0xff で飽和する演算を
考えていたのですが if 文を使う以外にいい方法が思いつきませんでした。
BYTE a@` b;
int c;
c = a + b;
if( c > (BYTE)0xff ) c = 0xff;
... 以下 4 つ繰り返し。
0108名無しさん@お腹いっぱい。
NGNGって、今のPCだと逆効果かも。
0109108
NGNGああ鬱だし脳
0110名無しさん@お腹いっぱい。
NGNG{
unsigned char retval;
_asm {
mov al@` a
mov dl@` b
add al@` dl
sbb cl@` cl
or al@` cl
mov retval@` al
}
return retval;
}
うまく使わんと、パーシャルレジスタストールの餌食になるよ。
0111110
NGNG0112>110
NGNG0113名無しさん
NGNGBYTE Table[2]={0@`0xFF};
BYTE a@` b;
int c;
c = a + b;
c=c | Table[c >> 8];
255+255は512以下だからな。
0114飽和加算
NGNGして、alとandかな。
4つ足した数を使って飽和させるほうが早い気がする。
どっちにしろ、cでifを使うのにくらべて、測定可能な速度差が出るかど
うかは、わからんけど。
0115名無しさん@お腹いっぱい。
NGNG前いた会社に最適化マニアがいて、きちんと動いてるのに
まだ速くする!とか言ってゴネてくれたが・・・。
0116虹
NGNGunionだと、
union {
int all;
struct {
int a:1;
int b:1;
} bit;
} flag;
みたいな書き方になると思うのですが、それだと階層が一つ深くなる
じゃないですか。
>>105-106
すいません、どこがまずいのかわかんないです。
0117名無しさん@お腹いっぱい。
NGNGsizeof flag をかんがえてごらん
0118107
NGNG皆さんご教授いただきありがとうございます
インラインアセンブラやビット操作で if 文は削ることが
できるんですね、勉強になりました。
>c=c | Table[c >> 8];
c |= (BYTE)((0x100) - (c >> 8));
これでもいいのかな
0119>117
NGNG0120119
NGNG0121>113@`118
NGNG0122121
NGNGBYTE Table[2]={0xFF@`0};
c &= Table[c >> 8];
---
c &= (0 - (c >> 8));
0123121@`122
NGNG0124虹
NGNG>>117 >>119
(flag.c)
int main(int argc@` char **argv) {
struct {
int a:1;
int b:1;
} flag;
*(int *)&flag=0;
printf("size of flag=%d\n"@` sizeof(flag));
printf("size of int=%d\n"@` sizeof(int));
return 0;
}
>./flag
size of flag=4
size of int=4
なんですけど…。ちなみにgccです。
0125名無しさん@お腹いっぱい。
NGNG0126107
NGNG>c &= (0 - (c >> 8));
ありがとうございます。飽和減算に使えそうです。
c |= -(c >> 8);
これで定数が消えました。いいかんじになってきました。
shr eax@` 8
neg eax
or ebx@` eax
(たぶんコンパイルするとこんな感じになりそう)
これ以上の高速化は 8bit * 4 を一気に処理するしかないでしょうか。
0127名無しさん@お腹いっぱい。
NGNG0128名無しさん@お腹いっぱい。
NGNG>c |= -(c >> 8);
>これで定数が消えました。いいかんじになってきました。
よくわからんな。その処理ってなんなんだ?
0か1になった奴を答えから引くことに何の意味がある?
0129Visual名無しさん
NGNG0xffを越えてれば
c |= 0xff
でなけりゃ
c |= 0x00
って感じだから問題ないだろ。
0130名無しさん@お腹いっぱい。
NGNG8bit同士の加算だと、飽和してるのは 0x100〜0x1fe だ。
8bitシフトすると1 になるのだな。
で、これを符号反転すると(2の補数表現だと)0xff になって、
飽和しない場合は 0 を符号反転するから 0 。
で、>>129のようになってめでたしめでたし。
0131123
NGNG厳密には
c = (c | -(c >> 8)) & 0xFF;
だね。後で代入時にキャストするから書かなかっただけかな?
また勘違いだったらごめん。
0132126
NGNG>後で代入時にキャストするから書かなかっただけかな?
はい。0xff でマスクかけたほうが ANSI 定義の
キャスト変換に合うのでいいのですが -1 になってるから
ま、いいかなと思いました。(^^;)
補数表現とかキャスト変換は自分の使っている処理系に依存しています。
まとめて処理するのを考えていますがなかなか難しいです。
0133名無しさん@お腹いっぱい。
NGNG4つ足してからなら>>114の方法でええんでないの?
Cで書くなら 0x7f00を足して16ビットシフトして符号反転、かな。
0134133
NGNG0135133
NGNG0136某ランド
NGNG{
unsigned c;
_asm {
mov eax@`a;
mov ebx@`b;
and eax@`7f7f7f7fh;//MSB以外と
and ebx@`7f7f7f7fh;//MSB以外と
add eax@`ebx;
mov ecx@`eax;
mov eax@`a
mov ebx@`b
and eax@`80808080h;// ax@`bx@`cxのMSBが2つ以上1なら飽和
and ebx@`80808080h;// ax@`bx@`cxのMSBがひとつでも1ならMSB=1
add eax@`ebx
mov ebx@`ecx
rcr eax@`1
shr ebx@`1
and ebx@`40404040h
add eax@`ebx
mov ebx@`eax
shl eax@`1
shr ebx@`7 ;//各桁のキャリをLSBに合わせる
and ebx@`01010101h
add ebx@`7f7f7f7fh;//CF=0 then 7F else 80
not ebx ;//CF=0 then 80 else 7f
and ebx@`7f7f7f7fh;//cf=0 then 00 else 7f
and eax@`80808080h;
or ecx@`ebx
or eax@`ecx
mov c@`eax; //帰値はeaxなので不要だが警告を黙らせる為に
}
return c;
}
0137某ランド
NGNGunsigned ClipAdd4(unsigned a@`int b)
{
unsigned c;
_asm {
mov eax@`a;
mov ebx@`b;
add AL@`BL
sbb CL@`CL
or CL@`AL
ror ecx@`8
shr eax@`8
shr ebx@`8
add AL@`BL
sbb CL@`CL
or CL@`AL
ror ecx@`8
shr eax@`8
shr ebx@`8
add AL@`BL
sbb CL@`CL
or CL@`AL
ror ecx@`8
shr eax@`8
shr ebx@`8
add AL@`BL
sbb CL@`CL
or CL@`AL
ror ecx@`8
mov c@`ecx
}
return c;
}
0138某ランド
NGNGnsigned ClipAdd4(unsigned a@`int b)
{
unsigned c;
_asm {
mov eax@`a;
mov ebx@`b;
add AL@`BL
sbb CL@`CL
add AH@`BH
sbb CH@`CH
or CX@`AX
ror ecx@`16
shr eax@`16
shr ebx@`16
add AL@`BL
sbb CL@`CL
add AH@`BH
sbb CH@`CH
or CX@`AX
ror ecx@`16
mov c@`ecx
}
return c;
}
0139名無しさん@お腹いっぱい。
NGNGヴァイタミンといったり
0140>136
NGNG{
unsigned r = (a & 0x7f7f7f7f) + (b & 0x7f7f7f7f);
unsigned c = ((a>>1) & 0x40404040)
+ ((b>>1) & 0x40404040)
+ ((r>>1) & 0x40404040);
return ( (~( ( (c>>7) & 0x01010101 ) + 0x7f7f7f7f) ) & 0x7f7f7f7f )
| ( (c<<1) & 0x80808080 )
| r;
}
0141126
NGNG126です。133さん、某ランドさん、140さん
ご教示いただき、ありがとうございます。
アセンブラとフラグ、強力ですね。
できればcで書こうかなと思っていたのですが、
アセンブラソース見ていたら
アセンブラのほうがいいのかもと思いました。(^^;)
皆さんのアセンブラコードのテクニーク、
有り難く拝読、教科書にさせていただきます。m(__)m
僕が使ってたコードはこんな感じです。
inline DWORD add4byte( DWORD a@` DWORD b)
{
DWORD t = (a & 0x7f7f7f7f) + (b & 0x7f7f7f7f);
DWORD u = (a ^ b) & 0x80808080;
DWORD m = ((a & b) | ((a ^ b) & t)) & 0x80808080;
m |= m - (m >> 7);
return (m ^ u) | t;
}
いまいち u@`m がマターリしてます。(^^;)
0142sage
NGNG■ このスレッドは過去ログ倉庫に格納されています