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

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
やっぱりこれです
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
50デフォルトの名無しさん:2010/11/11(木) 20:04:19
ほっしゅ
51デフォルトの名無しさん:2010/11/11(木) 21:04:20
馬鹿ばっか。w
52デフォルトの名無しさん:2010/11/12(金) 16:16:41
>>1見てわからんとか、Cの初級者以下じゃないか。
ム板ってこんなに程度が低くなってたのか。
53デフォルトの名無しさん:2010/11/12(金) 18:37:43
>>2
warosu
54デフォルトの名無しさん:2011/11/12(土) 10:42:10.24
>>1
デバックしにくいダメコードだな
55デフォルトの名無しさん:2011/11/12(土) 12:51:15.21
まさかの1年
56デフォルトの名無しさん:2011/11/14(月) 21:53:40.55
57デフォルトの名無しさん:2011/11/15(火) 07:26:30.94
だれか>>31教えてください。
58デフォルトの名無しさん:2011/11/15(火) 21:06:15.22
どこかのスレでみたこれ。

/*
ここに処理
//*/

最初の/*を//*にすればどーたらこーたら
59デフォルトの名無しさん:2011/11/16(水) 10:56:24.84
#if 0
#endif
なら感動した
60デフォルトの名無しさん:2011/11/18(金) 15:19:39.54
>>58
これ確実なの?未定義っぽいけど…。
61デフォルトの名無しさん:2011/11/18(金) 20:19:39.09
>>60
確実じゃないの?

場合によるけど。


/*例1
 /*コメントのネストはNG*/
//*/

/*例2
 //このコメントはネストしてもOK
//*/

/*例3
//*//この状態はNG

ようはコンパイラが/*を見つけたら*/がくるまでコメントと見なす機能と//のコメントを上手く使ってるという事で。
62デフォルトの名無しさん:2011/11/19(土) 16:29:55.61
うっ
63デフォルトの名無しさん:2012/02/18(土) 01:26:16.96
char main[]={0xC9};

関数=コードというのは分かっていたんだが、ここまでストレートに書けるモノなのかと衝撃を受けた。
64デフォルトの名無しさん:2012/02/18(土) 01:58:42.21
何も起きない
65デフォルトの名無しさん:2012/10/08(月) 20:24:41.73
/**/
66デフォルトの名無しさん:2012/10/11(木) 20:09:31.62
test
67デフォルトの名無しさん:2013/03/26(火) 09:10:03.52
(function(s, callback){
  var result = console.log(s);
  callback(result, function(err, result){
    if(err){
      throw err;
    }else{
      console.log(result);
    }
  });
})('Hello', function(err, callback){
  if(err){
    throw err;
  }else{
    callback(null, 'world');
  }
});
68デフォルトの名無しさん:2013/03/26(火) 09:18:43.10
馬鹿には無理
69デフォルトの名無しさん:2013/03/26(火) 09:23:36.70
#include <windows.h>
#define o(c) (c=='/'?63:(c=='+'?62:(c<'A'?c-'0'+52:(c>'Z'?c-'a'+26:(c-'A')))))
int main(int ac, char **av)
{
BYTE str[]="AAAAfzH8QRUEXWl0XVF0XX10QXUEf1X8AFwAXxXwGMekNYpIToHAR0qYAGaofyXEQX0AXUvMXVygXUNwQQnAf06YAAAAAAAA";
BYTE dmp[72];
for(int i=0;i<24;i++){
BYTE c[4];
for(int j=0;j<sizeof(c);j++) c[j]=o(str[i*sizeof(c)+j]);
dmp[i*3+0]=((c[0]<<2)&0x00fc)|((c[1]>>4)&0x03);
dmp[i*3+1]=((c[1]<<4)&0x00f0)|((c[2]>>2)&0x0f);
dmp[i*3+2]=((c[2]<<6)&0x00c0)|(c[3]&0x3f);
}
HWND hwnd=GetDesktopWindow();
HDC hdc=GetDC(hwnd);
HDC hmemdc=CreateCompatibleDC(hdc);
HBITMAP hbmp=CreateCompatibleBitmap(hdc,32,32);
HBITMAP holdbmp=(HBITMAP)SelectObject(hmemdc,hbmp);
for(int i=0;i<24;i++)for(int j=0;j<3;j++)for(int k=0;k<8;k++)
BitBlt(hdc,(j*8+k)*32,i*32,32,32,hmemdc,0,0,dmp[i*3+j]&(128>>k)?SRCCOPY:NOTSRCCOPY);
SelectObject(hmemdc,holdbmp);
DeleteDC(hmemdc);
ReleaseDC(hwnd,hdc);
DeleteObject(hbmp);
return 0;
}
70デフォルトの名無しさん:2013/03/26(火) 11:41:16.36
eNptWNeS40aWfZ+v6NDEarqEmiUAgjBRakXAE44kDOE6+gHeew+t/n1R1T0asxsMEOTJkzevSXPz/jWrg3IKo0+/LlkdNsvw3+l
vf/nrn+BeZv4H0vZeUnmfgqaqonr8fMCvP300Hs9PL3+Zmyz85KNIGAVNGH2mHIP99Es4jK9ZPX4asj16/Q4NffDy+8fPg/wVB7
99+R384y1u+u9dhi/ga/YFfMt+hY4v4Av88nuQev2nX/wvP5Gut4MEAJxOP719kMMv/tcMgL79/Xh9A6B/SgkOCcGv4VsAAC/vw
3y0B3//G/C3b18GIHgbgC/h2x/v9Hftvo/3ruPpfIwJ/NAv+Ip8e/sHJz84+a/IW340B1/zb1/exX4+jPma/YIA+bd32S//dZjz
dth8YGfgsOzz5+Ar+O3XX+GXn8EVBOPg5X/eIejbb78hH9D55U869J0OHXTkBx38TocP+ncJ8T/p8Hc6fNDR7/TgnR58PX/79PM
ncD0f3D/+eNe88rL6wwQveP3uyl+8+YeJ5X5Y8e3LT5G4jzUD61c5MBOSHTReHMuxCjaRVfpxcsnFuZtPUx1VtsZTE6SU51Qu5i
RpZO4HsCjWTOIAy43jWrPtbf4EEMyNIDGlCt2Y2+/h/VEvy2PBBYondo2uAWuPKY/VKbAoFAPOBHRN7rrUxghEl41O9Xf2Hoh5T
5ZVYA9NCiWBM54RYVBVGkxGkBnj0KMLymVVHext8UnKI2k2ZxfK6DBiVAUAqaiF1kj0GXKVeq483luXyp4oqw5/8y7pIXegoAxf
wzZx+NIrz1BtUYNi3JyhIwKLBGcW3Ug+BbicrYjeGemw7+moMeMcsOxCUYIsm5/syUYcLvAEdJ7FwUszJORaB2FNl6eWFNWCk1F
YOlQwyXkybxYNk/x8XcWtYG/w0AhXSWjX6Ik69mnLBoTzSmC+TW73CG9QbSCMLjf1TAMDsKa8ty5WYbkTzGJFgGKJSSBP43T3z0
UWn1lxm4AxfEqIpA/uDorBep2qzbUExu43Te5lLenOfgiDDsrlJuZU5Mg0t9vlHrh6O4S+TAroGKzcfXVXmb/SghJJi8+j62GOj
Qgh4zMNY7dzQfiWAQCP7Loe7tYn8frQjOzUZShcN1LUBWnQlYXSMZjUOClvHoairo55g5n7WA7KBA/Kspw26yqS7t3L7NgXh46s
aH13V1Q6jynQQmld03Vj3cWylscuDMIwIpXRyot7wY3VNiposd/62z0H1nHibgNTqFYAFEElWPi2XQrvudP4iCJm4rCBkj0ywS2
bFgLUK4H4GXVT2SEte/m+Yn10N51VftpEBFsQP2kXx/T6y31j76RiQjV94aV7Gy5dYN6tczILgQsOJ8sGmw4lTDIBqIsLypTrol
xYnWLPDl0fNgUH6qPeHLinO5QLWtZS3x8TycUtc+OFsI2nCprGdvazc38hc7cEvRznZvWM0eXlpnAcBCDJUgam+6wk3JYLuTOQy
rinnT2YjEZpniWq02Ow9Aw686RmbHLlEW4loTeZQ1ecdyy+YrRNbINrUFpc0wyQEqNNcyujcjaffm1S2F11sMLtggo9cckwDisK
WlPPOeNTZjC6KgWrL7Nsc1sVZcPUCrqxra2nGE2h25RcOT+eS5+bvo3S2sVlawOrkRJ4bFi5XXjPRb3kRBlR2o++I9p8ag9ql52
j3eUVWfEl1VmsB1RJhGdBVy31qzJ94tUAZlLrbIq49FNrc0XsigjnXl2xmEtnLmWuWsRu8RAjTqocSgWXMsc0No5lmQy6C43SHt
LN2HHJ9VxqDwvfp9zcRVrQfK2mT2Te7SBaye3d46+rG7qZKFkNkZPLzEeL1h6LhHbmbI0HHRgeXt+tiMwd+sCToZIOfZWV+jJno
71デフォルトの名無しさん:2013/03/26(火) 11:42:52.12
R1ZxcUt131hoccoYhg+wru6lwobZPMkweCmbQxHqdPZRVznyqbUDZPVkwmHLn34t16qXpaslrD7cAsL20WlNAZ6M8tr2ERrh7Bg
uN/Ola9MWE1ELs7LmbNAAKoGE/iAHt7ICe64QZmOEYdyWgfoo4fa7oU/nQZo1C4MYQCef9n2yGnhXr+ekrB5SjogdW2+zxrRgHW
7QKUKYpC+Int3cWd+dcz+kdzDadd4UiQioGcfMe4xLgvYrKFDkNB4RN7eMFgD9HLj8uV0J9xNvi/X9DQ/U9+SZZTTQvWUyzchNE
z0Fgh6XdgmMrUPPTLOD6Dt9lGxytybIXIWdK/vWRk9ZijYO1HhF+ItG3Rw8M2LGMGFBeO9fmmPdQa72uqJPsZOvgmLsSYXBFjN5
6gjbE10YHlfT1wo6ECnSE9v9/GYEzBZV8ttOgNJiZVS0FgO8aCuwq3l8TtsziMSYkQa9ydGb+r16mKtvqY31GSsETRidHVw2cw3
VyBR9DlYdrqea2fISdLiTm0mlVaZgSbJZa2rKy3EVfDSFpJ2Td1+UDrOUAn5jj+I+HZE1cg6Y9yIqWQtHxignRJqV6mNwSBpy9c
KIkzsxCyL/Gr2FtVSoXFCU2/yeJXA8pZHdi4hEOiK3QnqkdEQ0GT8ZnnlVehaYAcX5sYNT+5yHeNR7zPak1VphR9A444Vw8V9C2
5YpUDR5foIHndZcwmWHQuZ5Fe4mkjdsog82+7PYs7jCbjUFws0MXn1FDxaeAmLY6lgxzmdUsC26LV8uvoU4AuBLdEaKULmoFs70
oCm3ZTrUOneYDkjrAWzRYUtIU3X4epjjy1aJ1Rx9ds5f7oaJPOGYCzbdm0JpevGgbHUPLVQKpYA5gaVeHmzcOHWk17aAxrsQExM
4FYgrecBvwbPCxob0nDC7iM3Q81Dw1wGOV/TFhfO9YM1NtrhzLVd7RZUuvOdhmyCm9vVj83oYu7NirrpaKbyyTpO7SDzAd8Xt1x
znZmjypQaoUrzagIbkFjq7hm6msm6ZjczINEC2usVuUPGlVMV3+lAB6aofg0Y3pJghKpm7YIZ2dgzQ7NXqucwxMSo0R48FN9QfF
x7CDc3GbFIBk4zxijTrOlhdb/kO6aZD5MY5rFUc/tKlMKxcckeQgWaaGVO/pydYulQ/OhiLCG95jXnjRfVUDmGnJ8UxmcA75gWV
IBG2gETRJw2QYDRQ2h9IkACJK0eug1uUxhDpV49ogKcli1dMYHOS1c/L550K5MeIfh9KPViMfuVXXqjpp0e6oICyEtAPJ/hUVdv
Zj0yGurUnJBLI9CrSXFOLBqZL8dRjvbRzHhbFQfmaFrwskZn86kgwoZPjGWpJ30TSDPZewewxyOdIoDjLLlELO0IZVwQ1qVuGbL
S1hSL/Z3RrkAJM31/d5EL43slF0cKc6w9treyFhDopXWuvRnLXjOhqY6z5kUGdWuTkzW5hWhatIPU0E/KEmCblUk26SYf6ZsluV
lLv5U5aZgVKQ3pg65Ejl77NoaHY2Mggd6LRQfyH/4GzWeSteTQBloJSaEneOvquzz3vS66dyKs9rj00+yZhHCAS/1wLRrFvOHG1
SopWK0Vm7foJn1EKeBep+J8fqb66sXTPKwG/tgDbIRA72wfy5DzLT3MHQ0IENe8G4UhsJ1BZfZ0N+ezWcDZLOImnsvNVZ/12A0G
ppdo+EnM2L0K1rSxLqspn8hbtgbxSCmZrpDTEIyUpQsjUIEqSmx4Vyaae+wVqn5mTpw6Bhc4Y6/NxUv8umCf2tlTThpitvDA9vt
zlnG54loV4E17JrG1F32+NVVCDHgaalQtvtMWuRMsrGrKtQBlOONucXXl+tYB/SWB/Es73Cn7iZagzhB2GxE2GJcJgEu+dHEwEA
72デフォルトの名無しさん:2013/03/26(火) 11:54:13.50
FAjI0cMd6o8FYaZdkYE7pxdg1hLe3LpxGTZAST7vOZnYJiB4DrOOeG2bNPAUi4xhd3tjkZ07FLHIuo3nDf57O5XXTQhkmzlR+pV
8GBme3ZQj/FhqlHNzz+7QNvc1W6ygDJtOr0RDJsDJTyHlB7tjM9l1QhziPZTqLZTTNV/+GuXTLbqruec/R0wzocO3KzxjQlgiq4
nMAutnIRZuUxLnVP+BBrnE47GcSZXcxgbQN8l6tzoY1O44blk9saPd16Xlqydg+dSEPDZS1HsReRi5TJq7lUPAISKldSR1JASWn
vnjfkiLIengzR6Lm1hFzocfS85Hw/1ckqF97l9jjLhMzPWo7yd6VSRBhYRTri+UcCcKHv2rKxnLgjrw6EDMrmvsHL/sY84zgqAr
t6QJaQFxbFLaJb8QBgGcoJ769t6BsLIbcgNkGitOUFENzEhi6VmcqW+rnH947w6FynyL7fSaRFgSJc81MPgax1yrl6VZXoZJ05s
MAfinKWrnC0dvqNFsk4WEIrnZTWjVowp1dntnT+mskXxrzDpZHFt21YzQDDInxPvDbT+SKG8Agup5TbY5yzrNvjtKYoaeuw2Dwo
9bhJYc+TuBAOcBWCVcxcQ1+qznwibWcCJ57lQBGXjCQqs62qLoS1bFrthJGpRwktYc/5klua4pbEE32K3PNq1oIN2ewglzkWdeF
FshQZ0N73jFbLZ1PrreN0iZNtMLlwQsHKOGPp3i0XSNM4zBIu136awRDOcBldC9snjnRjxtWHqM2H9dVwwtHG8g2UPSEF2GPd5V
kEhEqr6MVyS1VsiVCWI50Vy9kFi/ZZREs2WKEIdlyapDpFyQ+nvmAS/0jNe8hSLqI8nPjIp3FeB5iubDjfpTyGvo/LpawMzNloL
RbLQgIjdUJvCy3x+qTFTDhmuimON38WE9UamAVkfIN4pFhkhS68ouPpWvFpGyqJkl8TqNWAKDVREM6j1eNLcCOXYb7p8KIJ0DGr
ElBnz4OcgCznY8lgdZx2h2SqQgQjRaOW4byLSwiK0RXU6NTCdTD2UYJK4yL5w5kH94BGEPGMn7ZBjgYUUaEjF528SSdsdbORJ8p
gdamjqH1O/GPeBq1rbBZ65y9V7PoPPKuF00LH+oJEP2pB5Y5hX88wdP729s8q1Dv4+g6+vlc6Xr4z/Sn+CmNnFPz2Nh236yT+KE
99+YDesvjzVAdN1fbRMHw+qK8/fxSv/pT08tJH49TXn6C3q3VjPqVLHX7ho5GJhmJsWuujhvb55e3K0J/SMPhooj+/s35gVVQdM
N1H3hjRx0DemPll9M4Jg4NCCYZCPj4dF6L2/5CobKy89p34ioLg66Hvv3RoyvC9z+cfwIselVEw3v38+P78fdTXd6kvb8cNgir/
xMDj80Paq3UVDPbG6vrL278Xxz5cAwAv/14Ow9CPetjhs3efZr9gKJB/+5NTfAFfqy8QjL8Vvx4PALxWv/32BfoP+s/Voen4yNa
o/IdG+S84ULxmrx9FsPj9OSKXfdf5PxT+Fxt0jabvD+fl7f81/Lt3Xt6Yo3GM/tH4L9B7AD64L2/aAXhD9CNsrx9x+RF08O2P/w
UBPgSo
73デフォルトの名無しさん:2013/10/28(月) 14:38:54.10
spamかと思ったらbase64か
74デフォルトの名無しさん:2013/12/23(月) 22:24:51.29
>>17
4年が経とうかという書き込みにレス。
XOR 使う方法も同じだけど、大抵は素直にテンポラリ使った方がコード面もスピード面もいいんだよな。
コードが増えても RAM は1バイトたりとも使いたくない場合にのみ有効なワザだな。
ROM は数十KB 載ってるのに RAM は 256 バイトぐらいしかない組み込みとか。
75デフォルトの名無しさん:2013/12/24(火) 00:19:00.39
ループ内でレジスタを全部使いきっちゃった場合に使えるのかも
76デフォルトの名無しさん:2013/12/24(火) 09:24:17.82
それでもメモリに余裕があるならテンポラリ確保する方が良策だな。
いまどき組み込みでも値交換のテンポラリすら確保できないような状況は
なかなかないよな。

しかしすごいね、見てる人は見てるんだな。
77デフォルトの名無しさん:2013/12/24(火) 10:13:18.47
専用ブラウザ使ってたらねぇ。

それはさて、メモリに余裕がなくてもレジスタがあるなら要らないノウハウだよ。
つーか、下手なコンパイラだと余計にメモリを喰いそうだ。
78デフォルトの名無しさん:2014/01/13(月) 17:02:39.14
メモリを使うよりは速い
79デフォルトの名無しさん:2014/01/13(月) 19:21:46.60
10年くらい昔、どっかのサイトでCを使って
「TRUEとFALSEを交互に返す関数」の作り方について解説があった

if文で実現する奴  :初心者プログラマー
not演算で実現する奴:並プログラマー
xor演算で実現する奴:上級プログラマー

当時学生だった俺はえらく感銘を受けたが
現在はxorで実現する奴を開発チームに入れると禍根を残す気がするのだ
80デフォルトの名無しさん:2014/01/13(月) 22:40:47.87
10年後になると、「notだろうがxorだろうがandだろうが、たいした差は無いな」
と思うよ
81デフォルトの名無しさん:2014/01/13(月) 22:43:52.15
>>57
またもやウン年前の書き込みにレス。

アキュムレータの下位4ビットをキャラクタコードに変換してる。
メリットはジャンプ命令を使わずに書けることかな。
Z80 なら、

CP  0AH
CCF
ADC  30H
DAA

とも書けるけど、>>31 の方が汎用性が高いな。
82デフォルトの名無しさん:2014/01/13(月) 22:44:46.46
そういう意味じゃないだろ。くだらないトリックではなく、本来の意味に沿ってプログラムを書かないと、
メンテナンス不能につながっていく、ということを>>79はいいたいんだと思う。
83デフォルトの名無しさん:2014/01/13(月) 22:54:55.96
スレッドセーフなのか気になる
84デフォルトの名無しさん:2014/01/18(土) 13:02:24.39
>>79
xorで実現する奴:booleanの概念を持たない老害C(≠++)プログラマー
85デフォルトの名無しさん:2014/01/24(金) 09:45:25.41
要件通りのコードを書くのが正解。その手のトリックはコンパイラを作る人が必要なテクニック。
86デフォルトの名無しさん:2014/01/24(金) 10:17:20.71
すれ違い
87デフォルトの名無しさん:2014/01/26(日) 09:35:23.45
>>84
if(hoge == TRUE)…というコード書いて問題になったことがあるんだな。正直に言ってみろ。
88デフォルトの名無しさん:2014/02/05(水) 14:17:47.80
#include <stdio.h>
int main(int argc, char* argv[])
{
int x = 10000000;
int y = 1;

x = x ^ y;
y = x ^ y;
x = x ^ y;

printf("x=%d, y=%d\n", x, y);
return 0;
}

Output:
x=1, y=10000000
89デフォルトの名無しさん:2014/02/05(水) 14:47:34.79
4bitあれば証明には十分
90デフォルトの名無しさん:2014/03/31(月) 20:58:04.99 ID:jZUG5SzL
パズル的なコードで感動する人が多いのね。

個人的に目からウロコだったのはsuckless.orgのMakefile全般。
http://git.suckless.org/st/tree/Makefile?id=3c546ae73924804ddc6d29dc3ab2f12a93287009
GNUのツールは猫も杓子もautoconfで人間が読めないMakefileを吐き出すものだから、
Makefileは人間の書くもんじゃねえとかscons他モダーンなビルドシステムの方がいいとか思ってたんだが、
↑のを見てからむしろ他のビルドシステムが面倒に思えるようになってきた。
91デフォルトの名無しさん:2015/02/05(木) 18:46:10.70 ID:Wisgh0P5
同意
92デフォルトの名無しさん:2015/02/05(木) 23:16:56.03 ID:5/RSARoZ
#define ZERO 1

GNUでよく見かける。
93デフォルトの名無しさん:2015/02/05(木) 23:40:37.49 ID:7ArXIVK3
ワロタ

でも #ifdef で分けるのに使うマクロは 1 なんだよな
94デフォルトの名無しさん:2015/02/12(木) 16:15:36.77 ID:1WRWm2Rj
無名高階関数があればifやswitchなしで分岐作れるんだって感動した

Object subclass: #True.
! True class methodsFor: 'testing' !
ifTrue: aTrueBlock
ifFalse: aFalseBlock

^ aTrueBlock value.
!!

Object subclass: #False
! False class methodsFor: 'testing' !
ifTrue: aTrueBlock
ifFalse: aFalseBlock

^ aFalseBlock.
!!
| boolean |

boolean := True.
boolean := False.
boolean ifTrue: [ 1 ] ifFalse: [ 2 ].
95デフォルトの名無しさん:2015/02/12(木) 16:18:17.17 ID:1WRWm2Rj
valueが抜けてた。

Object subclass: #True.
! True class methodsFor: 'testing' !
ifTrue: aTrueBlock
ifFalse: aFalseBlock

^ aTrueBlock value.
!!

Object subclass: #False
! False class methodsFor: 'testing' !
ifTrue: aTrueBlock
ifFalse: aFalseBlock

^ aFalseBlock value.
!!
| boolean |

boolean := True.
boolean := False.
boolean ifTrue: [ 1 ] ifFalse: [ 2 ].
96デフォルトの名無しさん:2015/02/17(火) 17:11:11.79 ID:sT/CiA2T
Cでも三項演算子で分岐できるやん
だが無名のブロック作れると喜んで複雑化するのは破滅の入り口
そこであえて踏みとどまって名前つきブロック/関数にすべき
97デフォルトの名無しさん:2015/02/18(水) 02:37:00.51 ID:QTgMdBtY
>>96
わかってねーなー。
分岐や反復に専用構文が必要なくて、
言語機能が簡素になんのがいいんじゃん。
お陰で分岐だけじゃなく、C#なんかで使われる次世代の構文だって
言語機能の拡張なしで使えるんだぞ。

"以下usingを使ったexample.txtにvalueと書き込むC#の処理と同等の処理。"
'/tmp/example.txt' asFile withWriteStream:
[ :aStream |
aStream nextPutAll: 'value'.
].
98デフォルトの名無しさん:2015/02/28(土) 18:45:17.20 ID:LrNX9W7z
三項演算子はリテラル以外禁止だと前の会社で言われた
99デフォルトの名無しさん:2015/02/28(土) 18:54:09.47 ID:st/D/r/c
勤怠管理システムで残業0
http://www.fsas.fujitsu.com/service/idlm/
定時で強制ログオフシャットダウン
省エネ効果抜群
100デフォルトの名無しさん:2015/03/01(日) 00:41:40.88 ID:KvRPiAMx
awkだけど、最近ここで見た回答がすごいと思った。
2つのテーブルデータを合体させるとき、連想配列を使えば、
要素が同じか否か、という条件分岐を使わなくてもいいんだね。
たった1行で、しかもLinuxのjoinコマンドよりも融通が効くところがなおさらイイ。

How to merge two files using AWK?
http://stackoverflow.com/questions/5467690/how-to-merge-two-files-using-awk

$ awk 'FNR==NR{a[$1]=$2 FS $3;next}{ print $0, a[$1]}' file2 file1
101デフォルトの名無しさん:2015/03/03(火) 23:36:31.83 ID:StzQ6W23
>>98
printf( a ? "成功\n" : "失敗\n");

が書けることを地力で発見して感動して使いまくってたら
なんか微妙な顔されたことがある。
102デフォルトの名無しさん
普通
printf("%s\n", a ? "成功" : "失敗");
あるいは
printf("%s\n", ["失敗", "成功"][a]);
って書けると良いね