- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
#include <iostream>
#define n 1
int main()
{
using namespace std;
cout << (n < 0 ? 1 : 0)+
((n << 1) < 0 ? 1 : 0)+
((n << 2) < 0 ? 1 : 0)+
((n << 3) < 0 ? 1 : 0)+
((n << 4) < 0 ? 1 : 0)+
((n << 5) < 0 ? 1 : 0)+
((n << 6) < 0 ? 1 : 0)+
((n << 7) < 0 ? 1 : 0)+
((n << 8) < 0 ? 1 : 0)+
((n << 9) < 0 ? 1 : 0)+
((n << 10) < 0 ? 1 : 0)+
((n << 11) < 0 ? 1 : 0)+
((n << 12) < 0 ? 1 : 0)+
((n << 13) < 0 ? 1 : 0)+
((n << 14) < 0 ? 1 : 0)+
((n << 15) < 0 ? 1 : 0)+
((n << 16) < 0 ? 1 : 0)+
((n << 17) < 0 ? 1 : 0)+
((n << 18) < 0 ? 1 : 0)+
((n << 19) < 0 ? 1 : 0)+
((n << 20) < 0 ? 1 : 0)+
((n << 21) < 0 ? 1 : 0)+
((n << 22) < 0 ? 1 : 0)+
((n << 23) < 0 ? 1 : 0)+
((n << 24) < 0 ? 1 : 0)+
((n << 25) < 0 ? 1 : 0)+
((n << 26) < 0 ? 1 : 0)+
((n << 27) < 0 ? 1 : 0)+
((n << 28) < 0 ? 1 : 0)+
((n << 29) < 0 ? 1 : 0)+
((n << 30) < 0 ? 1 : 0)+
((n << 31) < 0 ? 1 : 0)
<< endl;
return 0;
}
Для заданного пятизначного целого числа подсчитать количество его нулей.
Прямо с экзамена. Преподаватель катается по полу. Не шучу.
> ((n << 1) < 0 ? 1 : 0)+
Тонко ;)
P.S. А нули надо было в двоичном или в десятичном представлении? Тут чел походу понял, что в двоичном...
http://liveworkspace.org/code/MTM2MT$12
Все по стандарту.
> Реализуй свой битсэт.
Я не велосипедист.
Неоптимальный, но простой алгоритм на сишке. Строк столько же.
Для тех кто не понял 0xf+0xf+1 == N == 5 первых битов установлены в единицу, а остальные 0 == 0b11111.
bormand
Тривиально. Фейспалм мне. :/
Имхо норм:
http://liveworkspace.org/code/MjEzMz$8
При этом gcc пишет:
1.cpp:8:38: предупреждение: величина сдвига вправо больше или равна ширине данного типа [по умолчанию включена]
Ой не зря я всегда боялся двигать больше чем на N-1 бит...
P.P.S. Вижуалка на 32хбитной платформе у друга выдает тож самое. Вот сишкоблядство то, даже сдвиги забагованы. (Жаль, что тут нет Тараса).
greater than or equal to the length in bits of the promoted left operand.
Но тебе я не скажу. На хацкиле лиспе битоёбство не в почёте.
Так что юзай табличку 255 значений.
256битные числа? омг
Или я не понял постановку задачи или вам непонятен вариант с таблицей.
Количество нулей или единиц для байта - не больше 8, это 3-х битные числа.
UPD: Ну и кстати - на 256 значений, чтобы не делать ноль отдельным случаем.
Typical Goomno way.
>std::bitset<5> s(~v).count()
linq-style
Пиздец. Вот собственно обыдление во всей красе.
>Ну и кстати - на 256 значений
Само собой. Очепятка.
> linq-style
Это не скомпилируется.
Может если так только:
std::bitset<5>(~v).count()
edit: даже с учетом коммента @bormand про 32-битный гцц:
http://ideone.com/EnkgNe
Беру свои слова обратно. Все ок. Но хотя при N=32 на 32хбитной платформе это все равно UB.
Вот именно. Суть С++.
потому что гцц при 1 << 32 не затрудняется сразу подставить результат, а при 1 << N делает sall, который при 32 выдает тупо то, что мы видим
P.S. Но из-за того, что на тех же ARM'ах все может быть совсем не так, это самый настоящий UB.
P.P.S. ARM: You can specify a shift with an immediate value (from zero to thirty one), or by a register which contains a value between zero and thirty one.
Оно походу сдвигает на число по модулю 32.
(1 << 32) ==1
(1 << 33) ==2
https://ideone.com/1wT12n
Ждем Тараса...
If the promoted type of the left-hand operand is int, only the five lowest-order bits of the right-hand operand are used as the shift distance.
If the promoted type of the left-hand operand is long, then only the six lowest-
order bits of the right-hand operand are used as the shift distance.
Может вылезти при расширении типа портировании кода с intов на long.
https://ideone.com/PhS98F
Различие с С++: там ты дополнительно стреляешь себе в ногу, которая уже застряла в граблях.
Наверное, я совершенно не понимаю сути грабель...
Ну-ну. UB вносит раздор в наши ряды:
http://ideone.com/MQncr8
http://ideone.com/RBDiV8
И в жабе помогло:
https://ideone.com/XMbbGk
Ну вот так разве что.
А вообще ООП'а стайл:
Jaba-style.
Новый вариант. Оттуда же.
Похоже пока не удалось.
1) массив не указатель, его нельзя плюсплюсить
2) нахуя звезда в предпоследней строке, ее результат не используется
3) где звезда в while(buff) и buff == '0'
Код имеет следующие проблемы:
1) Что если число десятизначное (int на 32 битной платфоме)
2) Без звезды while(buff) является вечным циклом
Гумно везде говно найдёт.
>Почему я из него вижу только говно и пощу суда?
Почему я всё говно что вижу сразу копипащу суда?
[fixed]
Я вас реально уважаю, ребят. Пожалуйста не давайте ссылки на такие сомнительные источники информации.