Здравствуйте, Peregrin, Вы писали:
P>У меня при компиляции с /O2 ничего не выводится. При запуске под отладчиком видно, что компилятор скомпилировал этот код вот в такое:
P>P>--- d:\cpp\vc7bugs\test1.cpp ---------------------------------------------------
P>#include <stdio.h>
P>void main()
P>{
P> int sh = 188;// это неважно, главное чтоб было больше чем 32
P> int a = 4; // это тоже не важно, главно чтоб а не 0
P> if( a << sh )
P> {
P> printf( "asdf\n" );
P> }
P>}
P>00401010 xor eax,eax
P>00401012 ret
P>--- f:\vs70builds\6030\vc\crtbld\crt\src\crt0.c --------------------------------
P>
Оптимизатор IMHO в вижуалке на сдвигах неверно отрабатывает.
Должно быть иначе.
этот код должен быть эквивалентен:
int sh = 188;
int a = 4;
if( a << (sh & 31) )
{
printf( "asdf\n" );
}
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока