Спасибо! Решил просто лекцию просмотреть про указатели в Си, но подача материала настолько увлекательна, что начал смотреть с самой первой лекции, даже не для того, чтобы узнать что-то новое, а просто из-за того, как это всё преподносится! Высший пилотаж!!!
Я хотел найти курс молодого бойца военного, но в числе попался и этот курс. Очень доходчиво, с деталями, практически ничего не упускается из виду, по крайней мере важного. И подача происходит в частично вольной форме: есть и шутка, интонация, речевая динамика. В общем очень интересно слушать и, главное, поучительно! Спасибо!!!
Спасибо за видео! Заметил такую, может и логичную, закономерность - обучающие онлайн лекции действующих преподавателей ВУЗов, что иностранных, что отечественных в подавляющем большинстве случаев на голову превосходят своих иных онлайн собратьев не имеющих отношения к преподавательской деятельности. Видимо дело в опыте донесения знаний и системности подачи материала.
Целочисленное переполнение стало причиной падения ракеты Ариан 5. Также, показываю целочисленное переполнение на примере GTA 3 на своём канале, если кому интересно.
это ошибку, а точнее андерфлоу, можно наблюдать в игре Цивилизация, там у Индии один из низких показателей воинственности (мирная цивилизация), а после изучения техи ядерного оружия, у всех наций снижается этот показатель. И у Индии он становится максимальным (мы щас про ботов говорим). В итоге Индия слетает с катушек и начинает всех бомбить ядерками. Очень весело
20:09 Почему даст отрицательное число. Умножаются ведь одинаковые типы int*int Привели ведь char явно к int Нифига не понятно Вот сделал как вы и сказали int main() { signed int a= 5; printf("%d ", (int)a*10); return 0; } ЗНАКОВЫЙ ТИП 19:29 переменной А умножается на 10. Ниаких переполнений нет. Даже если сделать беззнаковый тип, то нет переполнений. Очень интересно, но ни*рена непонятно.
Он неправильно сказал, умножение вообще можно убрать. Всё дело в _"char с = 'Я';",_ поскольку _char_ в действительности то же самое, что _signed char,_ а не _unsigned char._
@@7qim Проверил у себя, выдаёт -33 символ 'Я'. Не понял, в каком типе переменных тогда хранить букву 'Я'?)) Она имеет число 255 в коде, а 255 в 8 бит уже не помещается.
@@namename2031 В ASCII нет буквы "Я", ASCII это вообще 7-битовая таблица (коды от 0 до 127 включительно). Буква "Я" в разных кодовых таблицах имеет разные значения. Например, в OEM-866 (так же известной как кодировка DOS), это 159(0x9F), в кодировке Windows-1251, это 223 (0xDF). _char_ способен хранить любой 8-битовый символ, включая символ 'Я', но при попытке обработать его в виде числа (кода символа), можем попасть на грабли в виде отрицательных чисел. Если хотим шаманить с кодами символов, то лучше приводить явно к типу _unsigned char,_ то есть писать нечто вроде _"(unsigned char)a",_ вместо просто _"а",_ это если _а_ у нас определено как _char._ 255 прекрасно укладывается в 8 бит, потому что это ровно 8 битовых единиц (1 байт это значения от 0 до 255 включительно, а для знакового типа от -128 до 127 включительно). 255 это код маленькой буквы "я", а у большой код 223, отсюда в знаковом типе и значение -33 вылазит (223-256), а для "я" будет соответственно -1 (255-256).
Тимофей, а как Вы прокомментируете рекомендации Страуструпа использовать именно типы int, double, char безо всяких приставок (если нет особой необходимости в отступлении от этих типов) ? Конечно, Страуструп дает такие рекомендации в отношении С++... неужели даже в таких вопросах эти языки настолько отличаются?
Со стандарта С99 вводится встроенный булевой тип _Bool. Он является так же целочисленным типом, только с диапазоном 0 и 1. В этом же стандарте добавился и заголовочный файл stdbool.h с типом bool и значениями для него false и true, но по факту, bool - будет лишь псевдонимом для _Bool
Да ёлки же моталки.) Не мне поправлять таких гуру, только с уважением. Я вообще нуб , но когда заголовочный файл называют библиотекой, ну очень слух режет) си вообще не предусматривает подключение библиотеки из исходного кода.
Интересно, что для типа int переполнения не возникает. И ещё: компилятор gcc делает все вычисления на этапе компиляции, а в не с процессе запуска программы. Это можно увидеть, если запустить gcc с опцией -S. signed int a = -100 + 10U; signed long b = -100 + 10U; printf("a = %d ", a); // a = -90 printf("b = %ld ", b); // b = 4294967206
Переполнение происходит с каждым целочисленным типом, и с int в том числе. Но в данном примере переполнения не происходит, потому что 4294967196 (-100 в беззнаковом представлении) + 10 входит в диапазон int.
@@nanoqsh они входят в любой диапазон unsigned чисел. Там была ошибка связана не с переполнением именно в этом примере, а с неявным преобразованием -100 в тип unsigned. Это при любом типе приведёт к такому результату, если компилятор решит делать неявное преобразование в сторону unsigned. При этом кстати диапазон long long больше чем int. Это тем более должно вас отвратить от мысли, что проблема связана с переполнением.
Спасибо! Решил просто лекцию просмотреть про указатели в Си, но подача материала настолько увлекательна, что начал смотреть с самой первой лекции, даже не для того, чтобы узнать что-то новое, а просто из-за того, как это всё преподносится! Высший пилотаж!!!
аналогично))
Тоже решил посмотреть все с начала, хотя пока что ничего нового для меня, но рассказывает интересно, да и повторить не помешает.
Аахах у меня точно также. Начал с указателей и перешёл сюда
@@misha2993 Указатели...они указывают)
+
Я хотел найти курс молодого бойца военного, но в числе попался и этот курс. Очень доходчиво, с деталями, практически ничего не упускается из виду, по крайней мере важного.
И подача происходит в частично вольной форме: есть и шутка, интонация, речевая динамика. В общем очень интересно слушать и, главное, поучительно!
Спасибо!!!
То чувство, когда хотел на контракт, а случайно стал программистом? Бывает, понимаю =)
пол видео офигевал от происходящего, но в конце пришло озарение, понимание пришло)) Спасибо за крутые уроки по С)
Тимофей, спасибо огромное за лекции !
Спасибо за видео!
Заметил такую, может и логичную, закономерность - обучающие онлайн лекции действующих преподавателей ВУЗов, что иностранных, что отечественных в подавляющем большинстве случаев на голову превосходят своих иных онлайн собратьев не имеющих отношения к преподавательской деятельности.
Видимо дело в опыте донесения знаний и системности подачи материала.
спасибо огромное!!! лекции супер...по-чаще бы выходили лекции
Тимофей Хирьянов
Samyi lutsii prepodovateli, daje v Velikobritanii v univere nam tak ne prepodnosyat tak material. Maladets!
Где именно не преподают?
Тимофей спосибо.
Пока что в ютюбе самые понятные ролики по программированию это твои.
Я изучаю СИ и подписан на твой канал .
Отличые лекции, спасибо вам большое 👍
Целочисленное переполнение стало причиной падения ракеты Ариан 5. Также, показываю целочисленное переполнение на примере GTA 3 на своём канале, если кому интересно.
Огромное спасибо за лекции!
это ошибку, а точнее андерфлоу, можно наблюдать в игре Цивилизация, там у Индии один из низких показателей воинственности (мирная цивилизация), а после изучения техи ядерного оружия, у всех наций снижается этот показатель. И у Индии он становится максимальным (мы щас про ботов говорим). В итоге Индия слетает с катушек и начинает всех бомбить ядерками. Очень весело
ого, даже не догадывалась, что в этом причина.
емнип в героях каких-то тоже есть баг с величиной армий из-за целочисленного переполнения
Классно, спасибо за подачу информации
Потрясающе понятно и интересно
20:09 Почему даст отрицательное число. Умножаются ведь одинаковые типы int*int
Привели ведь char явно к int
Нифига не понятно
Вот сделал как вы и сказали
int main()
{
signed int a= 5;
printf("%d
", (int)a*10);
return 0;
}
ЗНАКОВЫЙ ТИП 19:29 переменной А умножается на 10. Ниаких переполнений нет.
Даже если сделать беззнаковый тип, то нет переполнений.
Очень интересно, но ни*рена непонятно.
Он неправильно сказал, умножение вообще можно убрать. Всё дело в _"char с = 'Я';",_ поскольку _char_ в действительности то же самое, что _signed char,_ а не _unsigned char._
@@7qim Символ 'Я' в ASCII это число 255.
255*10=2550
int d не способно сохранить число 2550?
@@7qim Если убрать умножение, то ещё непонятнее. char не способно сохранить символ 'Я'?
@@7qim Проверил у себя, выдаёт -33 символ 'Я'.
Не понял, в каком типе переменных тогда хранить букву 'Я'?))
Она имеет число 255 в коде, а 255 в 8 бит уже не помещается.
@@namename2031 В ASCII нет буквы "Я", ASCII это вообще 7-битовая таблица (коды от 0 до 127 включительно).
Буква "Я" в разных кодовых таблицах имеет разные значения. Например, в OEM-866 (так же известной как кодировка DOS), это 159(0x9F), в кодировке Windows-1251, это 223 (0xDF).
_char_ способен хранить любой 8-битовый символ, включая символ 'Я', но при попытке обработать его в виде числа (кода символа), можем попасть на грабли в виде отрицательных чисел. Если хотим шаманить с кодами символов, то лучше приводить явно к типу _unsigned char,_ то есть писать нечто вроде _"(unsigned char)a",_ вместо просто _"а",_ это если _а_ у нас определено как _char._
255 прекрасно укладывается в 8 бит, потому что это ровно 8 битовых единиц (1 байт это значения от 0 до 255 включительно, а для знакового типа от -128 до 127 включительно).
255 это код маленькой буквы "я", а у большой код 223, отсюда в знаковом типе и значение -33 вылазит (223-256), а для "я" будет соответственно -1 (255-256).
А про переполнение float есть видео?
Тимофей, а как Вы прокомментируете рекомендации Страуструпа использовать именно типы int, double, char безо всяких приставок (если нет особой необходимости в отступлении от этих типов) ?
Конечно, Страуструп дает такие рекомендации в отношении С++... неужели даже в таких вопросах эти языки настолько отличаются?
Люблю вас нимагу
Тимофей, я Вас люблю!
Здравствуйте!
Скажите пожалуйста как подключить библиотеку уже готовую(dll) к си проекту.
Спасибо
Приветствую, а как на курс зарегистрироваться, подскажите?
Очень крутые лекции
PS на счёт английского:
unknown - [ан-ноун] - неизвестный
character - [керэктэр] - символ, хотя тип char - чар
Только чистый си, по заветам старой школы
bool не стандарт вроде, нет?
он по памяти тоже берет один байт поэтому лучше взять либо char либо извращаться с битовыми полями
по крайней мере я так слышал
Со стандарта С99 вводится встроенный булевой тип _Bool. Он является так же целочисленным типом, только с диапазоном 0 и 1.
В этом же стандарте добавился и заголовочный файл stdbool.h с типом bool и значениями для него false и true, но по факту,
bool - будет лишь псевдонимом для _Bool
@@krsr454 typedef enum { false, true } bool;
Да ёлки же моталки.) Не мне поправлять таких гуру, только с уважением. Я вообще нуб , но когда заголовочный файл называют библиотекой, ну очень слух режет) си вообще не предусматривает подключение библиотеки из исходного кода.
ты уверен в своих словах?
Все же в С слово overflow относится только к знаковым типам а wrap around к беззнаковым
А на языках совсем-совсем уж высоких уровней разве таких проблем нет?
В совсем-совсем высоких нет)
В районе нет а в жабе и жабоскрипте есть
Очень странно что там 0 получился, обычно компилятор просто излишек невлезший записывает
Вот и у меня на Mingv через блокнот в консоле выдаёт -2.
А у меня ноль всегда получался)
Что значит знаковый char?
По идее символьный тип char.
Целое однобайтовое число со знаком
Знаковый: signed char (от -128 до 127)
Беззнаковый: unsigned char (от 0 до 255)
супер.
Интересно, что для типа int переполнения не возникает. И ещё: компилятор gcc делает все вычисления на этапе компиляции, а в не с процессе запуска программы. Это можно увидеть, если запустить gcc с опцией -S.
signed int a = -100 + 10U;
signed long b = -100 + 10U;
printf("a = %d
", a); // a = -90
printf("b = %ld
", b); // b = 4294967206
Переполнение происходит с каждым целочисленным типом, и с int в том числе. Но в данном примере переполнения не происходит, потому что 4294967196 (-100 в беззнаковом представлении) + 10 входит в диапазон int.
Интересно, поменяется ли поведение если отключить оптимизации
@@nanoqsh они входят в любой диапазон unsigned чисел. Там была ошибка связана не с переполнением именно в этом примере, а с неявным преобразованием -100 в тип unsigned. Это при любом типе приведёт к такому результату, если компилятор решит делать неявное преобразование в сторону unsigned. При этом кстати диапазон long long больше чем int. Это тем более должно вас отвратить от мысли, что проблема связана с переполнением.
11:02
16:24
Просто снас
Почему вы называете инклуд-файлы библиотеками? Вас я считаю грамотным спецом, не хочу услышать такое от вас.
А что не так?
Правильно: заголовочные файлы.
Всё равно тупая придирка. И так понятно что имеется в виду
ну так они в любом случае указывают на "библиотеки" или что угодно исполняемое
потому что некоторые инклуд-файлы это библиотеки функций