ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
19 апреля
855992 Топик полностью
mut (14.07.2018 17:49 - 18:01, просмотров: 101) ответил De_User на Спасибо! Типа поправил на while ( v > 1 )
По 6 точкам совпадает с лобовым вариантом.  /* Разворот бит в слове */ unsigned short rvsbt(unsigned short v) { unsigned short r = v; // r will be reversed bits of v; first get LSB of v int s = sizeof(v)*8 - 1; // extra shift needed at end while(v > 1) { v >>= 1; r <<= 1; r |= v & 1; s--; } return(r << s); // shift when v's highest bits are zero } /* unsigned short rvsbt(unsigned short src) { unsigned short dst = 0; #define N (sizeof(src)*8 - 1) for(int i = 0; i <= N; i++) { if(src & (1 << i)) dst |= 1 << (N - i); } return dst; } */ void main(void) { int val; val = 0x00FF; printf("rvsbt(0x%04X) -> 0x%04X\n", val, rvsbt(val)); val = 0xFF00; printf("rvsbt(0x%04X) -> 0x%04X\n", val, rvsbt(val)); val = 0x5A5A; printf("rvsbt(0x%04X) -> 0x%04X\n", val, rvsbt(val)); val = 0xAAAA; printf("rvsbt(0x%04X) -> 0x%04X\n", val, rvsbt(val)); val = 0x5AAA; printf("rvsbt(0x%04X) -> 0x%04X\n", val, rvsbt(val)); val = 0xAA5A; printf("rvsbt(0x%04X) -> 0x%04X\n", val, rvsbt(val)); } Снимок экрана сравнивающий бинарный код вашего (слева) и лобового варианта, собирал Tiny C (win32) - tcc main.c:
image