2ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

今までに見たソースコードで一番感動したのは deux

1 :デフォルトの名無しさん:2010/01/12(火) 23:23:19
やっぱりこれです
while(*src++ = *dst++) ;
・ポインタの型によってインクリメントの適量を判断して加算してくれる点
・行末の ;
・終了判定
無駄も過剰もなくって感じで好きです

前スレ
http://pc12.2ch.net/test/read.cgi/tech/1037458703/

2 :デフォルトの名無しさん:2010/01/12(火) 23:26:20
srcとdstが逆なので0点

3 :デフォルトの名無しさん:2010/01/12(火) 23:27:43
演算子のオーバーロードでちゃんと
srcからdstに代入されるようになっているから

4 :デフォルトの名無しさん:2010/01/12(火) 23:29:39
>>1
要するに stos[b/w/d] だろ

5 :デフォルトの名無しさん:2010/01/12(火) 23:44:16
>>3
ほんとC++は何でもありだな

6 :デフォルトの名無しさん:2010/01/13(水) 02:01:36
過保護ってやつか

7 :デフォルトの名無しさん:2010/01/13(水) 06:56:38
>>3
左から右に代入に変更してあるってことか?アホじゃないのか?
それだったら -> を左から右への代入ってことにすればいいんじゃないのか?


8 :デフォルトの名無しさん:2010/01/13(水) 10:15:37
こういうので感動できないのは、俺が年だからかなぁ。 こういう書き方出来ると分かっても、使わないなぁ。

9 :デフォルトの名無しさん:2010/01/13(水) 12:04:53
昔は再帰の書き方で感動したこともあったけど
今は別にって感じだな
枯れちまって情熱がもうないのかもしれん

10 :デフォルトの名無しさん:2010/01/13(水) 12:09:23
int main()
{
return main();
}

11 :デフォルトの名無しさん:2010/01/13(水) 12:20:51
これ有名な技法でしょ。しかも代入方向間違ってるし。

12 :デフォルトの名無しさん:2010/01/13(水) 12:41:49
>>8
Cは実質アセンブラなんだから
movem (a0)+, (a1)+
見たいな事は出来ないと困る

13 :デフォルトの名無しさん:2010/01/13(水) 12:46:40
フラグが使えないのにアセンブラと言うのは否

14 :デフォルトの名無しさん:2010/01/13(水) 12:47:38
それ、なんか理屈が変だよ。

15 :デフォルトの名無しさん:2010/01/13(水) 13:04:55
ソースって訳じゃないんだけど
感動したものにこんなのがある

SQLで覆面算を解く
ttp://miko.org/~naruto/Artifact/MASKSQL.html

16 :デフォルトの名無しさん:2010/01/13(水) 14:18:44
呼び出し元でバッファサイズと終了条件の設定を保証しないといけないから、
これだけだと危険なコードだよねぇ

17 :デフォルトの名無しさん:2010/01/13(水) 17:47:19
値交換っててっきり一時変数が必要かと思ってたらそうでもなかったんだね

x = x + y;
y = x - y;
x = x - y;

18 :デフォルトの名無しさん:2010/01/13(水) 17:55:28
そうですね
それでうまくいく範囲の値を使っている限りはね

19 :デフォルトの名無しさん:2010/01/13(水) 18:28:37
>>12
アセンブラやってた人間から見たら当たり前だよな
Cで同じことが出来ると言われてもあっそうとしか

20 :デフォルトの名無しさん:2010/01/13(水) 19:23:16
>>1
これってループを抜ける保証があるの?
一見ないように見えるんだけど。


21 :デフォルトの名無しさん:2010/01/13(水) 19:24:31
>>17
http://codepad.org/72Hm2T8T
うまくいかないじゃん。

22 :デフォルトの名無しさん:2010/01/13(水) 19:26:56
>>1
終了条件を満たした直後に2つのポインタがインクリメントされてしまうのが
無駄なような気がしていたあの頃が懐かしい

23 :デフォルトの名無しさん:2010/01/14(木) 14:07:54
>>21
おいおい、doubleなのに%dとか素で言ってるのかw

24 :デフォルトの名無しさん:2010/01/14(木) 14:25:56
>>23
ごめん。素で言っちゃったw

25 :デフォルトの名無しさん:2010/01/14(木) 14:29:11
%eにしたらうまく出来てたwスマソw
http://codepad.org/pTLkz2cx


26 :デフォルトの名無しさん:2010/01/14(木) 14:32:10
16桁くらい差をつけてようやく反例ができた
http://codepad.org/DMn3DjZT


27 :デフォルトの名無しさん:2010/01/14(木) 14:45:26
>>26
まあ、桁あふれすれば当然そうなるわな
>>17の方法だと、有効桁数が1bit分減るってことだろ

28 :デフォルトの名無しさん:2010/01/14(木) 22:12:39
xor を使った値交換は超有名かと思ってたけど、知らない人もいるのかね。
>>17 みたいな劣化版を今更発見されても・・・ねえ

29 :デフォルトの名無しさん:2010/01/14(木) 23:31:37
XORが使えない環境もあるのだよ
SQLとか

30 :デフォルトの名無しさん:2010/01/15(金) 00:50:13
xor使って中央値を求めるコードは昔見て感動した
こんな奴。

int median(int x,int y,int z){
    return max(x,y)^max(y,z)^max(z,x);
}


31 :デフォルトの名無しさん:2010/01/15(金) 02:03:40
ADD  90H
DAA
ADC  40H
DAA

これ考えたやつの頭はどうかしてる。

32 :デフォルトの名無しさん:2010/01/15(金) 02:20:01
a = max(x,y)
b = min(x,y)
z = a*a - b + 2 * y

という式において、x, y と zの関係を表にすると、以下のように
zが正方形を規則正しく埋めるような形に並ぶ。
 00 01 04 09
 03 02 05 10
 08 07 06 11
 15 14 13 12

用途:
x,yの上限が動的に増える2次元配列を、
素のvetorに無理矢理突っ込むのに使ったり…

33 :デフォルトの名無しさん:2010/01/15(金) 06:16:22
>>28
誰が知らないと言ってるの?

34 :デフォルトの名無しさん:2010/01/15(金) 10:50:41
値の交換なんて高々数値1個分のメモリがあればできるのにと思ってたけど、
ROM が数十キロバイトもあるのに RAM が数百バイトなんてマイコンも今時あるんだな。
そら有用だわ。

35 :デフォルトの名無しさん:2010/01/15(金) 12:23:01
xorだと整数型にしか使えないのでは?

36 :デフォルトの名無しさん:2010/01/15(金) 13:43:40
すまん、すでに頭がアセンブラオンリーになってた。w

37 :デフォルトの名無しさん:2010/01/17(日) 13:10:35
Dim ac(10) As Class1

Public Sub Test()
Dim c As New Class1
Dim i As Integer
For i = 0 To 10
Set c = Nothing
Set ac(i) = c
Next i
End Sub

38 :デフォルトの名無しさん:2010/01/26(火) 17:28:08
>>32
00 01 03 06 10
02 04 07 11
05 08 12
09 13
14
こう並べると条件分岐のない式になる。データの種類によってはこれも便利。

39 :デフォルトの名無しさん:2010/01/26(火) 17:29:25
おっと、式を忘れていた。
z=(x+y)^2/2+(x+y)/2+y

40 :デフォルトの名無しさん:2010/03/24(水) 22:18:35
>>1のコードの意味を教えてくれ。構造体のコピー?

41 :デフォルトの名無しさん:2010/03/24(水) 22:22:22
違う。配列のコピー?よくわからんコードには解説もつけてくれるとありがたい。

42 :デフォルトの名無しさん:2010/03/24(水) 22:36:10
>>40
ゼロターミネイティッドな文字列のコピー
または、偽と可換な番兵付きのコンテナのコピー

43 :デフォルトの名無しさん:2010/03/24(水) 22:38:23
文字列のコピーじゃないかね
文字列の終端には\0があるからそれでループが終わる
K&Rとかに出てきそうな感じ

しかし、>>1って未定義じゃないんだろうか

初級C言語Q&Aの
二つの副作用完了点の間に、オブジェクトの値を2回以上変更している場合、
又は変更した後で新しい値を得ること以外の目的でそのオブジェクトをアク セスしている場合

詳しくないのでわからんけど

44 :デフォルトの名無しさん:2010/03/24(水) 22:56:11
>>43
未定義になるのは、「同一の」オブジェクトの値を二回以上変更した場合な

45 :デフォルトの名無しさん:2010/03/25(木) 18:39:57
把握した。
つまり、このコード自体に意味はないが
while((*src)++ = *dst++)
だったら未定義ということだな

46 :デフォルトの名無しさん:2010/03/25(木) 19:03:38
>>45
把握してない。w


47 :デフォルトの名無しさん:2010/03/25(木) 22:58:42
ここまで何もかも間違っているといっそすがすがしいなw

48 :デフォルトの名無しさん:2010/03/26(金) 05:40:51
>>45
未定義じゃ困るだろ。
右辺値に代入するコードがエラーにならなかったら、みんなC/C++捨てるよ。

49 :デフォルトの名無しさん:2010/03/26(金) 20:10:41
>>48
把握してない。w


10 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)