-
- (-1) было очень давно, когда еще встроенного типа bool не
существовало, а было только самодельное BOOL. Сейчас согласен,
операция ! применяется к bool, и стандарт требует превращения true
в 1. Т.е. записывая !0 имеем неявное (int)-(bool)-(!)-(int) - AlexBi(17.09.2020 11:14)
- Кстати, операция ! применяется к арифметическим типам (можно и к
float, например) и указателям. Результат этой операции имеет тип
int. Так что не надо нас путать, мы и сами запутаемся. - SciFi(17.09.2020 12:21)
- Мне кажется там идет двойное/тройное преобразование
(что-то)-(int)-(bool)-(! bool)-(int). Т.е. должен подойти любой
тип, умеющий превращаться в int - AlexBi(17.09.2020 12:44)
- Типы преобразовываться могут только один раз. A->B->C...
невозможно. Если А непосредственно не конвертируется в C -- не
заработает. - fk0легенда(17.09.2020 14:58, ссылка)
- Это интересно, но здесь даже нет преобразования. Оператор ! -- это сравнение с нулём, и если аргумент целое, плавучка или указатель, всё это работает немного по-разному. У целого -- простое сравнение с нулём, у плавучки -- сравнение с 0.0 (там уже может играть режим округления и т.п.), у указателя -- сравнение с нулевым указателем (который на какой-нибудь экзотической архитектуре может иметь ненулевое двоичное представление). - SciFi(17.09.2020 18:02)
- Да, я поторопился, встроенный во встроенный должны преобразовываться за один шаг. - AlexBi(17.09.2020 15:56)
- !0.1 == 0, !(int)0.1 == 1. - SciFi(17.09.2020 14:31, ссылка)
- Убедил. Мое представление о bool оказалось не правильным - AlexBi(17.09.2020 16:00)
- Типы преобразовываться могут только один раз. A->B->C...
невозможно. Если А непосредственно не конвертируется в C -- не
заработает. - fk0легенда(17.09.2020 14:58, ссылка)
- Мне кажется там идет двойное/тройное преобразование
(что-то)-(int)-(bool)-(! bool)-(int). Т.е. должен подойти любой
тип, умеющий превращаться в int - AlexBi(17.09.2020 12:44)
- Когда было !0 == -1? Хочу всё знать. - SciFi(17.09.2020 11:22)
- У борланда, из прошлого века. Но могу и ошибаться, давно это было,
почему-то (-1) записалось в моей памяти и всплыло первым. - AlexBi(17.09.2020 12:38)
- (int32t) -1 = 0xFFFFFFFF... - Гyдвинволшебник(17.09.2020 12:45)
- проверил на компиляторе от мелкомягких 89 года !0 == 1. Может еще давнее :) - abivan(17.09.2020 12:14)
- У борланда, из прошлого века. Но могу и ошибаться, давно это было,
почему-то (-1) записалось в моей памяти и всплыло первым. - AlexBi(17.09.2020 12:38)
- Кстати, операция ! применяется к арифметическим типам (можно и к
float, например) и указателям. Результат этой операции имеет тип
int. Так что не надо нас путать, мы и сами запутаемся. - SciFi(17.09.2020 12:21)
- (-1) было очень давно, когда еще встроенного типа bool не
существовало, а было только самодельное BOOL. Сейчас согласен,
операция ! применяется к bool, и стандарт требует превращения true
в 1. Т.е. записывая !0 имеем неявное (int)-(bool)-(!)-(int) - AlexBi(17.09.2020 11:14)