- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
#include <stdio.h>
int main () {
char c;
int result=0;
while(scanf("%c",&c) ) {
if( (c<'0') || (c > '1') ) break;
result«=1;
result+=c-'0';
};
printf("%d",result);
return 0;
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+133
#include <stdio.h>
int main () {
char c;
int result=0;
while(scanf("%c",&c) ) {
if( (c<'0') || (c > '1') ) break;
result«=1;
result+=c-'0';
};
printf("%d",result);
return 0;
}
Этот код переводит число из двоичной системы в десятичную. Зачем-то основано на работе с символами.
Ути-пути.
Оказывается, там уже есть Language tags. Осталось добавить поддержку языков программирования.
P.S. Это в том случае, если б оно компилировалось.
>"Сдвинуть все биты числа на одну позицию влево"
Не обманывайте.
"резалт открывающая кавычка равно один"
result <<= 1 сдвигает result на один бит влево. Битовое представление аналогично представлению в двоичной системе, поэтому result = result << 1 аналогично умножению на "10" в двоичной системе, т.е. result <<= 1 аналогично result *= 2.
Всё это аналогично result = result * 2 + (c-'0'); - "дописываем" новую цифру в конец числа. Или же, если использовать сдвиги и побитовое или: result = result << 1 | c - '0'; Из-за того, что в (result << 1) младший бит нулевой (сдвинули содержимое влево - самый правый бит "пустой"), а (c - '0') может быть строго либо 0, либо 1, можно "+" заменить на "|".
http://www.youtube.com/watch?v=Jj3AemEc5b8
На что получили ответ:
http://ideone.com/tqpcIj
Такие дела
http://ideone.com/9INCJF