Я очень редко оставляю комментарии на Ютубе Но это тот самый случай когда действительно стоит его оставить Только благодаря вам я начала понимать язык Си Спасибо вам за ваш огромный труд !!! С каждым видеороликом полученная информация складывается по полочкам , кирпичик за кирпичиком , деталька за деталькой , формируя прочный и крепкий фундамент без каких либо пробелов В конце каждого видеоролика не возникает ни одного непонятного момента или каких либо вопросов Огромное Спасибо Вам !!!
Учился у Вас языку Python, машинному обучению и нейронным сетям долгое время. Сейчас решил перейти на язык С++, и случайно натыкаюсь, что вы теперь делаете видео по этому языку. Аж на душе приятно стало. Спасибо за уроки по Python и С.
Огромное спасибо за такие грамотные и доступные уроки! По мере изучения программирования возникают вопросы по разным неочевидным вещям, и ответ обычно находится здесь
Курс прекрасен! Спасибо огромное! С нетерпением ждем остальных серий! Небольшое дополнение по оператору sizeof. Помимо переменной, операндом может быть и любое выржение, тип которого будет вычислен на этапе компиляции.
Большое спасибо за Ваши ролики по языку C! К сожалению, не было времени посмотреть их все и попробовать конструкции из них на практике, но надеюсь ближайшие дни наверстать!
Спасибо, что обращаете внимание на такие мелочи вроде "l-value". Даже в книгах по программированию это не всегда есть (либо переводчики как-всегда косячат). p.s. В принципе, основы Си я и так помню, но слушать вас очень приятно. ;)
Друзья, мы с вами свидетели создания Сергеем Балакиревым фундаментального труда по Си!!! Сергей, я знаю, что вы автор методических пособий по разным дисциплинам. Может замахнетесь на книгу (пособие) по этому курсу? Или видеоформат с текстовым вариантом (в будущем) вам ближе?
А после вводного курса планируется "продвинутый" курс по Си ? К примеру в python есть библиотека requests для парсинга, но она не предоставляет низкий доступ, и некоторые сайты "палят" софт через фингерпринт. И мне человек один шепнул, что этот фингерпринт можно как-то подменить под браузерный, на языке низкого уровня например на Си, Го и тд
Формально такой записи в Си нет. (Даже в С11 не ввели и это, по моему мнению, дичь). Однако разработчики GCC добавили такой формат записи. В другом компиляторе вы можете столкнуться (и даже скорее всего столкнетесь)с тем, что компилятору не понравится такая запись.
06:59 не совсем понятно, "если значение не умещается в диапазон, то компилятор автоматически подбирает размер типа данных", это происходит только при инициализации совмещённой с присваиванием или даже в том случае когда инициализация и присваивание значения происходят отдельно?
@@selfedu_rus что-то ерунда получается, пишу *int mmm = 100000000000000000000;* компилирую как *gcc -std=c99*, в ответ предупреждение, что значение велико для этого типа, а потом следующее: *overflow in conversion from «long int» to «int» changes value from «7766279631452241920» to «1661992960» [-Woverflow]* т.е. увеличения размерности типа не происходит + обрезало непонятно почему до такого числа
@@grayich это предупреждение из-за присваивания такого большого числа переменной типа int. Напишите просто: 100000000000000000000; без присваивания и не будет предупреждений.
Литерал тоже имеет определенный тип: 1, 1L и 1LL - вообще-то не одно и то же. Но при присваивании переменной или при операциях могут происходить автоматические преобразования (например, отбрасывание старших байтов ). 7766279631452241920 = 6BC7 5E2D 6310 0000_16 занимает 8 байтов (в 4-байтовый тип int не влезает), число 1661992960=6310 0000_16 занимает 4 байта. В данном случае старшие 4 байта были отброшены, чтобы число поместилось в int.
Здравствуйте, я хотел бы уточнить один момент. Правильно ли я понимаю, что если sizeof передать переменную, то он возвращает не то сколько реально занимает ее значение, а тот обьем который зарезервирован под тип данных этой переменной? То есть если в переменной типа int будет записано значение 1, то вернется значение того сколько памяти выделено под тип int, а не конкретно сколько байт занимает число 1.
Представь, что ты взял в собой бутылку воды литровую. Налить туда воды ты можешь сколько угодно, но размер бутылки от этого не поменяется. Если ты решил взять глоток воды с собой, то остальной объем будет не задействован. Также и в области памяти. Если ячейка памяти занимает 8 бит, то число 1 будет иметь вид 00000001. И число 1 будет весить 8 бит по той причине, что нули в этой маске - это тоже данные, которые указывают на значение этих самых битов. Можно еще такой пример. Если перед тобой пустая коробка, то на ней надо написать, что она пустая. Эти данные занимают какое-то место, но эти данные указывают на отсутствие данных. Как-то так :D
а можно ли в char хранить utf-8 символы, выходящие за пределы одного байта (подозреваю, что нет, ведь char ограничен одним байтом)? например char c = 'ж'; кидается в меня ворнингом о переполнении и в терминал выводит битый символ.
то есть, если изначально определить переменную как char (char var;), а потом этой var присвоить значение превышающее 255 (var = 299;), то тип переменной вар изменится на int?
@@selfedu_rus тогда не совсем понимаю. Если определить переменную var как int, а потом ей присвоить 358L, тип var останется int. Но тогда для чего менять представление литерала в отличный тип данных от переменной, которой он присваивается?
@@АлексейАлексеев-ц8х9тэто полезно при арифметических операциях, когда фигурируют разные типы переменных и нужно быть уверенным, что мы их правильно описали и воспринимаем
Указывать префикс при числовом литерале может быть важно при операциях с разными литералами в одном выражении. Например, sizeof(1) и sizeof(1L) дадут разные результаты.
18:32 то есть мы объявили переменную d2 как тип double, а потом, если присвоить ей значение -7 без точки, то получаем тип int.. Так в итоге у d2 будет тип double или int?
Я очень редко оставляю комментарии на Ютубе
Но это тот самый случай когда действительно стоит его оставить
Только благодаря вам я начала понимать язык Си
Спасибо вам за ваш огромный труд !!!
С каждым видеороликом полученная информация складывается по полочкам , кирпичик за кирпичиком , деталька за деталькой , формируя прочный и крепкий фундамент без каких либо пробелов
В конце каждого видеоролика не возникает ни одного непонятного момента или каких либо вопросов
Огромное Спасибо Вам !!!
Учился у Вас языку Python, машинному обучению и нейронным сетям долгое время. Сейчас решил перейти на язык С++, и случайно натыкаюсь, что вы теперь делаете видео по этому языку. Аж на душе приятно стало. Спасибо за уроки по Python и С.
Осторожно! "C++" и "С" это разные языки.
@@TSM_149 В С++ реализовано то что есть в С
Спасибо огромное за ваш гигантский труд! Ваши уроки просто бесподобны, занимаюсь по ним с великим наслаждением!)
Спасибо!
Сергей, Вы выставляете ролики быстрей, чем я успеваю их просматривать! 👍
Ясные и грамотные объяснения! Спасибо!
Огромное спасибо за такие грамотные и доступные уроки! По мере изучения программирования возникают вопросы по разным неочевидным вещям, и ответ обычно находится здесь
Как всегда на высшем уровне!
Премного благодарен вам за труды, начинаю изучение вашего канала с языка СИ, но думаю буду еще заглядывать + подписка
Курс прекрасен! Спасибо огромное! С нетерпением ждем остальных серий! Небольшое дополнение по оператору sizeof. Помимо переменной, операндом может быть и любое выржение, тип которого будет вычислен на этапе компиляции.
Очень нравятся ваши занятия! Спасибо!
Спасибо огромное, Сергей! Преподаватель от бога!)
Спасибо за ролик, продолжаем погружение 👌👍 Like в копилку!
Очень крутой курс! Спасибо вам!
Спасибо!
Спасибо. Интересно и понятно!
Большое спасибо за Ваши ролики по языку C! К сожалению, не было времени посмотреть их все и попробовать конструкции из них на практике, но надеюсь ближайшие дни наверстать!
Спасибо, что обращаете внимание на такие мелочи вроде "l-value". Даже в книгах по программированию это не всегда есть (либо переводчики как-всегда косячат).
p.s. В принципе, основы Си я и так помню, но слушать вас очень приятно. ;)
Супер! Продолжаем постигать С
Гениально!
Спасибо ❤❤❤
Друзья, мы с вами свидетели создания Сергеем Балакиревым фундаментального труда по Си!!! Сергей, я знаю, что вы автор методических пособий по разным дисциплинам. Может замахнетесь на книгу (пособие) по этому курсу? Или видеоформат с текстовым вариантом (в будущем) вам ближе?
Спасибо, стараюсь! Пока сделаю видео + текст, а потом... может к сообществу обращусь, чтобы текст оформили в виде пособия? Как вариант? Надо подумать.
спасибо!
А после вводного курса планируется "продвинутый" курс по Си ? К примеру в python есть библиотека requests для парсинга, но она не предоставляет низкий доступ, и некоторые сайты "палят" софт через фингерпринт. И мне человек один шепнул, что этот фингерпринт можно как-то подменить под браузерный, на языке низкого уровня например на Си, Го и тд
пока базовый делаю
@@selfedu_rus ОЧЕНЬ будем ждать продвинутый. Пожалуйста, не бросайте нас, своих подписчиков. 😊
@@dr.margulis7773 давишь на жалость, тем самым пытаешься манипулируешь
спасибо!👏👍
СПАСИБО
07:31 ещё в двоичной форме, через префикс 0b, например 0b0101
Формально такой записи в Си нет. (Даже в С11 не ввели и это, по моему мнению, дичь). Однако разработчики GCC добавили такой формат записи. В другом компиляторе вы можете столкнуться (и даже скорее всего столкнетесь)с тем, что компилятору не понравится такая запись.
@@Stresscms хм, тогда это очень странно, ведь си по близости к железу почти как асм, и местами очнеь удобно именно двоичные данные использовать.
@@grayich Посмотрел статью на вики про C2x. Судя по введениям все же дожали и добавили двоичные литералы типа 0b и 0B.
спасибо
9:29 почему используется именно "unsigned"? Неужели я не могу использовать отрицательный числовой литерал?
06:59 не совсем понятно, "если значение не умещается в диапазон, то компилятор автоматически подбирает размер типа данных", это происходит только при инициализации совмещённой с присваиванием или даже в том случае когда инициализация и присваивание значения происходят отдельно?
Это тип представления самого литерала в памяти. При операции присваивания это число будет записано в соответствии с типом переменной.
@@selfedu_rus что-то ерунда получается, пишу *int mmm = 100000000000000000000;* компилирую как *gcc -std=c99*, в ответ предупреждение, что значение велико для этого типа, а потом следующее:
*overflow in conversion from «long int» to «int» changes value from «7766279631452241920» to «1661992960» [-Woverflow]*
т.е. увеличения размерности типа не происходит + обрезало непонятно почему до такого числа
@@grayich это предупреждение из-за присваивания такого большого числа переменной типа int. Напишите просто:
100000000000000000000;
без присваивания и не будет предупреждений.
Литерал тоже имеет определенный тип: 1, 1L и 1LL - вообще-то не одно и то же. Но при присваивании переменной или при операциях могут происходить автоматические преобразования (например, отбрасывание старших байтов ). 7766279631452241920 = 6BC7 5E2D 6310 0000_16 занимает 8 байтов (в 4-байтовый тип int не влезает), число 1661992960=6310 0000_16 занимает 4 байта. В данном случае старшие 4 байта были отброшены, чтобы число поместилось в int.
Топчик
Здравствуйте, я хотел бы уточнить один момент. Правильно ли я понимаю, что если sizeof передать переменную, то он возвращает не то сколько реально занимает ее значение, а тот обьем который зарезервирован под тип данных этой переменной? То есть если в переменной типа int будет записано значение 1, то вернется значение того сколько памяти выделено под тип int, а не конкретно сколько байт занимает число 1.
число 1 в переменной типа int будет занимать столько, сколько занимает тип int ))
@@selfedu_rus Кажется я понял смысл, спасибо)
Представь, что ты взял в собой бутылку воды литровую. Налить туда воды ты можешь сколько угодно, но размер бутылки от этого не поменяется. Если ты решил взять глоток воды с собой, то остальной объем будет не задействован. Также и в области памяти. Если ячейка памяти занимает 8 бит, то число 1 будет иметь вид 00000001. И число 1 будет весить 8 бит по той причине, что нули в этой маске - это тоже данные, которые указывают на значение этих самых битов. Можно еще такой пример. Если перед тобой пустая коробка, то на ней надо написать, что она пустая. Эти данные занимают какое-то место, но эти данные указывают на отсутствие данных. Как-то так :D
@@Ordinary_man2049 Спасибо!
а можно ли в char хранить utf-8 символы, выходящие за пределы одного байта (подозреваю, что нет, ведь char ограничен одним байтом)? например char c = 'ж'; кидается в меня ворнингом о переполнении и в терминал выводит битый символ.
нельзя, вы сами ответили верно на свой вопрос )
У меня к автору только одна большая претензия: ну почему так редко выходят видео? :))
то есть, если изначально определить переменную как char (char var;), а потом этой var присвоить значение превышающее 255 (var = 299;), то тип переменной вар изменится на int?
нет, тип переменных в Си не меняется, а вот представление числового литерала зависит от его размера
@@selfedu_rus тогда не совсем понимаю. Если определить переменную var как int, а потом ей присвоить 358L, тип var останется int. Но тогда для чего менять представление литерала в отличный тип данных от переменной, которой он присваивается?
@@АлексейАлексеев-ц8х9тэто полезно при арифметических операциях, когда фигурируют разные типы переменных и нужно быть уверенным, что мы их правильно описали и воспринимаем
Указывать префикс при числовом литерале может быть важно при операциях с разными литералами в одном выражении. Например, sizeof(1) и sizeof(1L) дадут разные результаты.
18:32 то есть мы объявили переменную d2 как тип double, а потом, если присвоить ей значение -7 без точки, то получаем тип int.. Так в итоге у d2 будет тип double или int?
Типы переменных в языке Си не меняются. Поэтому, чего бы не присваивалось d2, его значение будет интерпретироваться как вещественное число.
что показывает мне автор видео Что вижу я после нажатия кнопки ввода Warning: Debuggee TargetArchitecture not detected, assuming x86_64.
А если у человека клавиатура только на русском или на китайском, как он нажмёт "d"?
Может лучше все таки код символа?
Вы бы на boosty зерегились что ли... ☺
Первый
R-value и L-value, просто, бетонный блок непонимания передо мной😞
да не обращайте на это пока внимание, на начальных этапах совершенно не принципиально!