| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Составление SQL-запросов > Суммирование поля типа bool |
| Автор: lightforever 11.3.2010, 10:58 |
| Как просуммировать в столбце значения типа bool? |
| Автор: Akina 11.3.2010, 11:02 |
| Да? а что получится, к примеру, если сложить 2*True+3*False? И главное - почему? Бред какой-то... |
| Автор: tusha 11.3.2010, 13:07 | ||
однако это возможно изза того, что бит это посути урезаный инт. может имелось ввиду булева алгебра? |
| Автор: Akina 11.3.2010, 13:55 |
Это неверный ответ. |
| Автор: Invisible_kid 11.3.2010, 14:15 |
ну тогда смотря где |
| Автор: tusha 11.3.2010, 14:17 | ||
результат = 1 т.е. TRUE |
| Автор: Invisible_kid 11.3.2010, 14:22 |
а вдруг хочется не булевый результат? |
| Автор: tusha 11.3.2010, 14:25 |
| имхо, как правильно сказал тов. Akina, арифметические операции над булевыми типами это бред |
| Автор: Invisible_kid 11.3.2010, 14:27 |
| и в самом деле |
| Автор: Akina 11.3.2010, 15:06 |
Не поленись посмотреть, в какой форме хранятся True и False. Для любого языка, СУБД и пр. Выяснится, что ВЕЗДЕ твой ответ неверен. |
| Автор: Invisible_kid 11.3.2010, 20:32 | ||
| я к тому что в тех же сях true/false могут восприниматься как 1/0 [и соответственно есть возможность использовать булевые результаты в математических выражениях] не поленился: билдер скушал следующий кусочек за милу душу:
и результатом вернул "2" |
| Автор: Akina 11.3.2010, 21:42 |
В данном случае выполняется неявное преобразование true в единицу. Тебе просто повезло. Ибо по классике true AND x = x и false AND x = false, откуда следует, что у false все биты нулевые, а у true единичные (т.е. при интерпретации как int получается не единица, а минус единица). Такое преобразование может запросто оказать программисту "медвежью услугу". |
| Автор: Invisible_kid 11.3.2010, 22:39 |
| то что неявно преобразуются это понятно, я и говорю что просто есть такая возможность, а вот что пользоваться этим в определенных условиях может оказаться опасным это другое дело |
| Автор: Zloxa 12.3.2010, 09:30 |
ну.... не совсем следует.... либо даже вовсе не следует. Логический And и побитовый and это разные операциии. А в том же Цэ, они и кодируются по разному. & vs && |
| Автор: Akina 12.3.2010, 21:10 |
Логический - это всего лишь частный случай побитового - когда операнды приводятся к однобитовому виду по простому правилу "если есть хотя бы один единичный бит, то 1, иначе 0", верно? и результат соответственно однобитовый, который потом может расширяться до требуемого. Так вот - я как раз говорю о том, что имеет место то, что я лично считаю ошибкой. Возьми любое расширение операнда - те же инструкции процессора cbw, cwd... чем выполняется расширение? старшим битом... именно так и должно было быть реализовано расширение однобитового операнда до любого бОльшего... а что сделали авторы? любые другие операнды (short, int, ...) расширяют правильно, а вот однобитовый почему-то всегда нулём. Ни логики, нии чего-то ещё - вот так левая пятка захотела. А у программистов это превращается в догму на одном языке и соответственно выглядит бредом на других. |