Ich will auch mal!
Hallo Leute,
Angespornt durch Eure Beiträge untersuchte ich das ganze mit dem Compiler von Borland C++ 6.0:
Achim
**int res = (val % 2) + 1;**
004018FE 8B45F8 mov eax,[ebp-0x08]
00401901 2501000080 and eax,0x80000001
00401906 7905 jns +0x05
00401908 48 dec eax
00401909 83C8FE or eax,-0x02
0040190C 40 inc eax
0040190D 40 inc eax
0040190E 8945FC mov [ebp-0x04],eax
[CMБ]
**int res = 1
00401911 8B4DF8 mov ecx,[ebp-0x08]
00401914 83E101 and ecx,0x01
00401917 BA01000000 mov edx,0x00000001
0040191C D3E2 shl edx,cl
0040191E 8955FC mov [ebp-0x04],edx**
Stefan
**int res = (val & 1) + 1;**
00401921 8B45F8 mov eax,[ebp-0x08]
00401024 83E001 and eax,0x01
00401927 40 inc eax
00401928 8945FC mov [ebp-0x04],eax
Der Compiler versucht aber bei Integermultiplikationen durchaus zu optimieren:
**int res = val \* 2;**
004018FE 8B45F8 mov eax,[ebp-0x08]
00401901 03C0 add eax,eax
00401903 8945FC mov [ebp-0x04],eax
**int res = val \* 3;**
00401906 8B55F8 mov edx,[ebp-0x08]
00401909 8D1452 lea edx,[edx+edx\*2]
0040190C 8955FC mov [ebp-0x04],edx
**int res = val \* 4;**
0040190F 8B4DF8 mov ecx,[ebp-0x08]
00401912 C1E102 shl ecx,0x02
00401915 894DFC mov [ebp-0x04],ecx
**int res = val \* 5;**
00401918 8B45F8 mov eax,[ebp-0x08]
0040191B 8D0480 lea eax,[eax+eax\*4]
0040191E 8945FC mov [ebp-0x04],eax
**int res = val \* 6;**
00401921 8B55F8 mov edx,[ebp-0x08]
00401924 03D2 add edx,edx
00401926 8D1452 lea edx,[edx+edx\*2]
00401929 8955FC mov [ebp-0x04],edx
Einen schönen Tag noch,
Pürsti