Переполнение и ошибки при работе с целыми типами в Си

  Рет қаралды 71,364

Тимофей Хирьянов

Тимофей Хирьянов

6 жыл бұрын

Целочисленное переполнение.
Декларация переменных целых типов.
Демонстрация переполнения.
Неявное приведение типов: проблема с unsigned и signed.
Явное приведение типов.
Курс молодого бойца по информатике (Язык Си).
cs.mipt.ru/c_intro

Пікірлер: 68
@juvusart
@juvusart 5 жыл бұрын
Спасибо! Решил просто лекцию просмотреть про указатели в Си, но подача материала настолько увлекательна, что начал смотреть с самой первой лекции, даже не для того, чтобы узнать что-то новое, а просто из-за того, как это всё преподносится! Высший пилотаж!!!
@nickjonas8257
@nickjonas8257 3 жыл бұрын
аналогично))
@AleksBojko
@AleksBojko 2 жыл бұрын
Тоже решил посмотреть все с начала, хотя пока что ничего нового для меня, но рассказывает интересно, да и повторить не помешает.
@misha2993
@misha2993 Жыл бұрын
Аахах у меня точно также. Начал с указателей и перешёл сюда
@juvusart
@juvusart Жыл бұрын
@@misha2993 Указатели...они указывают)
@samirprostov5554
@samirprostov5554 Жыл бұрын
+
@sanctuary_of_soul
@sanctuary_of_soul 2 жыл бұрын
Я хотел найти курс молодого бойца военного, но в числе попался и этот курс. Очень доходчиво, с деталями, практически ничего не упускается из виду, по крайней мере важного. И подача происходит в частично вольной форме: есть и шутка, интонация, речевая динамика. В общем очень интересно слушать и, главное, поучительно! Спасибо!!!
@lalivirtei
@lalivirtei Жыл бұрын
То чувство, когда хотел на контракт, а случайно стал программистом? Бывает, понимаю =)
@sergeismazheluk1662
@sergeismazheluk1662 5 жыл бұрын
спасибо огромное!!! лекции супер...по-чаще бы выходили лекции
@mrslavik2104
@mrslavik2104 3 жыл бұрын
пол видео офигевал от происходящего, но в конце пришло озарение, понимание пришло)) Спасибо за крутые уроки по С)
@melangeshark
@melangeshark 5 жыл бұрын
Огромное спасибо за лекции!
@adwer123
@adwer123 6 жыл бұрын
Тимофей, спасибо огромное за лекции !
@user-lo2ue9zp7k
@user-lo2ue9zp7k 3 жыл бұрын
Тимофей спосибо. Пока что в ютюбе самые понятные ролики по программированию это твои. Я изучаю СИ и подписан на твой канал .
@grom3
@grom3 4 жыл бұрын
Потрясающе понятно и интересно
@Im_like_Merphy
@Im_like_Merphy Жыл бұрын
Классно, спасибо за подачу информации
@Brucelans
@Brucelans 2 жыл бұрын
Спасибо за видео! Заметил такую, может и логичную, закономерность - обучающие онлайн лекции действующих преподавателей ВУЗов, что иностранных, что отечественных в подавляющем большинстве случаев на голову превосходят своих иных онлайн собратьев не имеющих отношения к преподавательской деятельности. Видимо дело в опыте донесения знаний и системности подачи материала.
@ivanovsergiu8575
@ivanovsergiu8575 5 жыл бұрын
Тимофей Хирьянов Samyi lutsii prepodovateli, daje v Velikobritanii v univere nam tak ne prepodnosyat tak material. Maladets!
@bogdantymKOLUBO
@bogdantymKOLUBO 9 ай бұрын
Где именно не преподают?
@LLlblKAPHO
@LLlblKAPHO 2 жыл бұрын
это ошибку, а точнее андерфлоу, можно наблюдать в игре Цивилизация, там у Индии один из низких показателей воинственности (мирная цивилизация), а после изучения техи ядерного оружия, у всех наций снижается этот показатель. И у Индии он становится максимальным (мы щас про ботов говорим). В итоге Индия слетает с катушек и начинает всех бомбить ядерками. Очень весело
@user-ch7hx8fh6k
@user-ch7hx8fh6k 3 жыл бұрын
Люблю вас нимагу
@yummiem1811
@yummiem1811 5 жыл бұрын
супер.
@pro100SOm
@pro100SOm 6 жыл бұрын
Тимофей, а как Вы прокомментируете рекомендации Страуструпа использовать именно типы int, double, char безо всяких приставок (если нет особой необходимости в отступлении от этих типов) ? Конечно, Страуструп дает такие рекомендации в отношении С++... неужели даже в таких вопросах эти языки настолько отличаются?
@w.t.2905
@w.t.2905 4 жыл бұрын
Целочисленное переполнение стало причиной падения ракеты Ариан 5. Также, показываю целочисленное переполнение на примере GTA 3 на своём канале, если кому интересно.
@namename2031
@namename2031 2 жыл бұрын
А про переполнение float есть видео?
@spolyr
@spolyr 2 жыл бұрын
Здравствуйте! Скажите пожалуйста как подключить библиотеку уже готовую(dll) к си проекту. Спасибо
@dantesalighieri
@dantesalighieri 2 жыл бұрын
Тимофей, я Вас люблю!
@user-wb5wj6ib6y
@user-wb5wj6ib6y Жыл бұрын
Да ёлки же моталки.) Не мне поправлять таких гуру, только с уважением. Я вообще нуб , но когда заголовочный файл называют библиотекой, ну очень слух режет) си вообще не предусматривает подключение библиотеки из исходного кода.
@user-ph2mu9tf1u
@user-ph2mu9tf1u Жыл бұрын
Приветствую, а как на курс зарегистрироваться, подскажите?
@iwfttl
@iwfttl 2 жыл бұрын
Только чистый си, по заветам старой школы
@dmitriykonopinskiy3793
@dmitriykonopinskiy3793 3 жыл бұрын
Очень странно что там 0 получился, обычно компилятор просто излишек невлезший записывает Вот и у меня на Mingv через блокнот в консоле выдаёт -2.
@user-cf5cc7rr6q
@user-cf5cc7rr6q 3 жыл бұрын
А у меня ноль всегда получался)
@sluge1
@sluge1 5 жыл бұрын
Все же в С слово overflow относится только к знаковым типам а wrap around к беззнаковым
@mihaitimofti9789
@mihaitimofti9789 2 жыл бұрын
bool не стандарт вроде, нет? он по памяти тоже берет один байт поэтому лучше взять либо char либо извращаться с битовыми полями
@mihaitimofti9789
@mihaitimofti9789 2 жыл бұрын
по крайней мере я так слышал
@krsr454
@krsr454 2 жыл бұрын
Со стандарта С99 вводится встроенный булевой тип _Bool. Он является так же целочисленным типом, только с диапазоном 0 и 1. В этом же стандарте добавился и заголовочный файл stdbool.h с типом bool и значениями для него false и true, но по факту, bool - будет лишь псевдонимом для _Bool
@trigeminalneuralgia9889
@trigeminalneuralgia9889 Жыл бұрын
@@krsr454 typedef enum { false, true } bool;
@namename2031
@namename2031 2 жыл бұрын
20:09 Почему даст отрицательное число. Умножаются ведь одинаковые типы int*int Привели ведь char явно к int Нифига не понятно Вот сделал как вы и сказали int main() { signed int a= 5; printf("%d ", (int)a*10); return 0; } ЗНАКОВЫЙ ТИП 19:29 переменной А умножается на 10. Ниаких переполнений нет. Даже если сделать беззнаковый тип, то нет переполнений. Очень интересно, но ни*рена непонятно.
@7qim
@7qim 2 жыл бұрын
Он неправильно сказал, умножение вообще можно убрать. Всё дело в _"char с = 'Я';",_ поскольку _char_ в действительности то же самое, что _signed char,_ а не _unsigned char._
@namename2031
@namename2031 2 жыл бұрын
@@7qim Символ 'Я' в ASCII это число 255. 255*10=2550 int d не способно сохранить число 2550?
@namename2031
@namename2031 2 жыл бұрын
@@7qim Если убрать умножение, то ещё непонятнее. char не способно сохранить символ 'Я'?
@namename2031
@namename2031 2 жыл бұрын
@@7qim Проверил у себя, выдаёт -33 символ 'Я'. Не понял, в каком типе переменных тогда хранить букву 'Я'?)) Она имеет число 255 в коде, а 255 в 8 бит уже не помещается.
@7qim
@7qim 2 жыл бұрын
@@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).
@KD-3.7
@KD-3.7 10 ай бұрын
11:02 16:24
@batfist6595
@batfist6595 5 жыл бұрын
Просто снас
@SalikhovDamir
@SalikhovDamir 4 жыл бұрын
Что значит знаковый char?
@skva85
@skva85 4 жыл бұрын
По идее символьный тип char.
@nanoqsh
@nanoqsh 3 жыл бұрын
Целое однобайтовое число со знаком
@user-kq9bk9jw1n
@user-kq9bk9jw1n 3 жыл бұрын
Знаковый: signed char (от -128 до 127) Беззнаковый: unsigned char (от 0 до 255)
@subterraneanrose4404
@subterraneanrose4404 4 жыл бұрын
А на языках совсем-совсем уж высоких уровней разве таких проблем нет?
@user-wp2zb4rw2b
@user-wp2zb4rw2b 4 жыл бұрын
В совсем-совсем высоких нет)
@bogdantymKOLUBO
@bogdantymKOLUBO 9 ай бұрын
В районе нет а в жабе и жабоскрипте есть
@OlegSklyarov
@OlegSklyarov 4 жыл бұрын
Интересно, что для типа 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
@nanoqsh
@nanoqsh 3 жыл бұрын
Переполнение происходит с каждым целочисленным типом, и с int в том числе. Но в данном примере переполнения не происходит, потому что 4294967196 (-100 в беззнаковом представлении) + 10 входит в диапазон int.
@user-cf5cc7rr6q
@user-cf5cc7rr6q 3 жыл бұрын
Интересно, поменяется ли поведение если отключить оптимизации
@user-cf5cc7rr6q
@user-cf5cc7rr6q 3 жыл бұрын
@@nanoqsh они входят в любой диапазон unsigned чисел. Там была ошибка связана не с переполнением именно в этом примере, а с неявным преобразованием -100 в тип unsigned. Это при любом типе приведёт к такому результату, если компилятор решит делать неявное преобразование в сторону unsigned. При этом кстати диапазон long long больше чем int. Это тем более должно вас отвратить от мысли, что проблема связана с переполнением.
@romanbrazhnikov9049
@romanbrazhnikov9049 5 жыл бұрын
Очень крутые лекции PS на счёт английского: unknown - [ан-ноун] - неизвестный character - [керэктэр] - символ, хотя тип char - чар
@vip51000
@vip51000 3 жыл бұрын
Почему вы называете инклуд-файлы библиотеками? Вас я считаю грамотным спецом, не хочу услышать такое от вас.
@nanoqsh
@nanoqsh 3 жыл бұрын
А что не так?
@user-kq9bk9jw1n
@user-kq9bk9jw1n 3 жыл бұрын
Правильно: заголовочные файлы.
@nanoqsh
@nanoqsh 3 жыл бұрын
Всё равно тупая придирка. И так понятно что имеется в виду
@tochka832
@tochka832 3 жыл бұрын
ну так они в любом случае указывают на "библиотеки" или что угодно исполняемое
@sslem1285
@sslem1285 3 жыл бұрын
потому что некоторые инклуд-файлы это библиотеки функций
Циклы for и while в Си: сходство и различие
6:20
Тимофей Хирьянов
Рет қаралды 69 М.
Адреса и указатели в Си. Адресная арифметика
27:47
Тимофей Хирьянов
Рет қаралды 160 М.
Became invisible for one day!  #funny #wednesday #memes
00:25
Watch Me
Рет қаралды 58 МЛН
Despicable Me Fart Blaster
00:51
_vector_
Рет қаралды 18 МЛН
Incredible magic 🤯✨
00:53
America's Got Talent
Рет қаралды 76 МЛН
Функции в языке Си
27:17
Тимофей Хирьянов
Рет қаралды 44 М.
Рекурсия. Репка и матрёшка
18:37
Тимофей Хирьянов
Рет қаралды 117 М.
Ошибки и предупреждения при компиляции на Си
18:15
Тимофей Хирьянов
Рет қаралды 93 М.
Техника безопасности при работе с памятью в Си
19:25
Тимофей Хирьянов
Рет қаралды 34 М.
Копирование массива, реверс циклический сдвиг на Си
20:30
Двумерные массивы в Си: обычные и динамические
21:49
Тимофей Хирьянов
Рет қаралды 71 М.
Сортировка массива вставками на Си
14:25
Тимофей Хирьянов
Рет қаралды 71 М.
Became invisible for one day!  #funny #wednesday #memes
00:25
Watch Me
Рет қаралды 58 МЛН