Изучаю у Вас SQLite .. Уже не знаю, куда ставить второй лайк на видео) Четко, без воды, понятно и доступно! И ни за какие курсы платить не надо! ВЫ-ЛЕГЕНДА! Я Вам очень сильно благодарен за такую работу! Всем добра и счастья!)
Это настолько углублённый и разжёванный курс, что поймёт даже пятилетка! Огромное спасибо за проделанную работу. Ваши старания абсолютно бесплатно, за что тройной респект. Если бы вы были инфоцыганом, заманивающим аудиторию на свои курсы, я бы с радостью на них записался! С моим мнением согласны многие, судя по комментариям. Всего вам наилучшего
Формально, по стандарту C99 типы char, signed char и unsigned char - это три разных типа. Фактически на практике char обычно эквивалентен signed char или unsigned char - зависит от компилятора (вернее, от настроек компилятора). Для облегчения переносимости есть стандартный заголовочный файл stdint.h, где задаются типы вроде int16_t (равно 16 бит), чтобы не зависеть от длины целых типов на разных платформах.
В таблице стоило бы показать и беззнаковые типы и их диаппазоны, как мне кажется: unsigned char, unsigned short, unsigned int, unsigned long, unsigned long long
Очень интересно, как можно проверить, что когда мы присваиваем значение одного итератора другому, что мы копируем его значение в другую ячейку памяти, а не ссылаемся ну туже самую ячейку.
Спасибо большое за Ваши выпуски! Скажите, а есть возможность задавать переменные как ссылки, как, например, в PHP или в Rust? Например, создавать $a = 5, $b = &$a, при этом они ссылаются на одну и ту же область памяти, и меняя $b, меняется и $a? Это могло бы повысить быстродействие и помогло бы реализовать отложенные вычисления, как сделано в PHP.
Непонятно по поводу *char* . Она как символ и она же как число. Правильно понимаю, что её создали для работы с символами, но потом посидели, почесали затылки и её же определили как однобайтовый тип для чисел, чтоб не плодить ещё 1 схожий тип данных но только для чисел? И отличие её от например short не только в размере, но и в умении конвертировать символ-число-символ? Получается тип char медленее типа short ?
Занятно, получается тип "строка" в Си нет, а есть лишь набор символов каждый из которых хранится в одной ячейке из 8 бит? Бедный char в ответе за всё. И еще вопрос, при записи в память char как я понял 1 байт это минимально допустимое выделение памяти. Т.е. число 2 будет записано как 00000010. А можно ли в этом случае получать доступ к отдельному биту внутри ячейки байта?
1. На самом деле все языки программирования "под капотом" так хранят строки. 2. Да, минимальный объем памяти один байт (как правило, 8 бит, но не всегда и зависит от архитектуры компьютера). 3. Для работы с отдельными битами используются битовые операции, о них отдельное занятие в этом курсе.
Хм.. может, конечно, от компилятора зависит, но у меня char тоже по умолчанию знаковый, и после 127 идёт переполнение. А если указываю unsigned, то 128, 129 и т.д. уже нормально записывает.
// Почему компилятор не ругается, если в "signed char a;" поместить число 128, // которое превышает диапазон от -128 до 127 // в отладчике будет a=-128 signed char a; a=128; // И для int аналогично int диапазон от -2 147 483 648 до 2 147 483 647 int x; x=2147483648; // в отладчике будет x=-2147483648
@@selfedu_rus а тогда возникает у меня ещё вопрос, вот значение переменной, в ячейке, скажем, так которая имеет адрес. Где тогда хранится тип переменной, и как все это вместе держится (тип и значение)
На сколько я понял, на этапе компиляции появляются таблицы соответствия ячеек и типа хранящейся там информации. Но после создания исполняемого файла эти таблицы исчезают: в машинном коде их нет. Если посмотреть код на ассемблере объявления переменных типа long long, char, float - код явным образом различается для разных типов. Таким образом, информация о типе переменной в конкретной части памяти "встраивается" компилятором в сам машинный код.
Изучаю у Вас SQLite .. Уже не знаю, куда ставить второй лайк на видео) Четко, без воды, понятно и доступно! И ни за какие курсы платить не надо! ВЫ-ЛЕГЕНДА! Я Вам очень сильно благодарен за такую работу! Всем добра и счастья!)
Это настолько углублённый и разжёванный курс, что поймёт даже пятилетка! Огромное спасибо за проделанную работу. Ваши старания абсолютно бесплатно, за что тройной респект. Если бы вы были инфоцыганом, заманивающим аудиторию на свои курсы, я бы с радостью на них записался! С моим мнением согласны многие, судя по комментариям. Всего вам наилучшего
Лучший курс по Си, который видел
Ура! Новый урок! Посмотрел с удовольствием. Знаю немного пайтон, очень интересно посмотреть на программирование со стороны языка С. Спасибо большое
same here :)
Зачет !!!! Уникальный канал.... Спасибо автору за достойную работу!
Большое спасибо за работу! Просмотр материала - удовольствие!
И снова лайк за проделанную работу!!! Нужные уроки, качественная подача материала, заодно и память освежу!!!
Формально, по стандарту C99 типы char, signed char и unsigned char - это три разных типа. Фактически на практике char обычно эквивалентен signed char или unsigned char - зависит от компилятора (вернее, от настроек компилятора).
Для облегчения переносимости есть стандартный заголовочный файл stdint.h, где задаются типы вроде int16_t (равно 16 бит), чтобы не зависеть от длины целых типов на разных платформах.
Спасибо. Полезно и доходчиво!
Люблю вас и ваши уроки!🥰
Как говорится, "Си мы любим не за это" 😊
Огромное спасибо!
Спасибо👍
Спасибо! 👏👍
спасибо!👏👍
Здравствуйте! Очень благодарна Вам за канал, за ваш труд. Вы можете записать видео по сегментации медицинских снимков? 🙏🙏🙏
спасибо
ТОВАРИЩИ, расскажите, как запустить режим отладки, пожалуйста!!!
В таблице стоило бы показать и беззнаковые типы и их диаппазоны, как мне кажется: unsigned char, unsigned short, unsigned int, unsigned long, unsigned long long
Есть вопрос, после компиляции программы с переменными ячейка памяти освобождактся или как?
Очень интересно, как можно проверить, что когда мы присваиваем значение одного итератора другому, что мы копируем его значение в другую ячейку памяти, а не ссылаемся ну туже самую ячейку.
Спасибо большое за Ваши выпуски! Скажите, а есть возможность задавать переменные как ссылки, как, например, в PHP или в Rust? Например, создавать $a = 5, $b = &$a, при этом они ссылаются на одну и ту же область памяти, и меняя $b, меняется и $a? Это могло бы повысить быстродействие и помогло бы реализовать отложенные вычисления, как сделано в PHP.
Погугли про указатели и/или дождись видео про них здесь. Это одна из ключевых штук :)
Конечно, это делается через указатели. Об этом далеко впереди )
@@selfedu_rus Спасибо!
@@Alexey-gp7vc Спасибо!
спасибо! Только char тоже знаковый
стандартом не оговорено, может быть и знаковым и беззнаковым
Непонятно по поводу *char* . Она как символ и она же как число. Правильно понимаю, что её создали для работы с символами, но потом посидели, почесали затылки и её же определили как однобайтовый тип для чисел, чтоб не плодить ещё 1 схожий тип данных но только для чисел? И отличие её от например short не только в размере, но и в умении конвертировать символ-число-символ? Получается тип char медленее типа short ?
нет, не так, в следующем видео я поясняю этот момент, скоро выйдет
Sehr gut
А после курса по С, курс по плюсам будет?
он уже есть - это ооп С++
Занятно, получается тип "строка" в Си нет, а есть лишь набор символов каждый из которых хранится в одной ячейке из 8 бит? Бедный char в ответе за всё. И еще вопрос, при записи в память char как я понял 1 байт это минимально допустимое выделение памяти. Т.е. число 2 будет записано как 00000010. А можно ли в этом случае получать доступ к отдельному биту внутри ячейки байта?
1. На самом деле все языки программирования "под капотом" так хранят строки.
2. Да, минимальный объем памяти один байт (как правило, 8 бит, но не всегда и зависит от архитектуры компьютера).
3. Для работы с отдельными битами используются битовые операции, о них отдельное занятие в этом курсе.
@@selfedu_rus Благодарю Вас!
Начинать имена обычных переменных с подчеркивания не следует, т.к. обычно так называются особые "системные" переменные.
Хм.. может, конечно, от компилятора зависит, но у меня char тоже по умолчанию знаковый, и после 127 идёт переполнение. А если указываю unsigned, то 128, 129 и т.д. уже нормально записывает.
да, это зависит от компилятора
У меня рядом с переменными в режиме отладки сообщение: byte_memory = 100 '. Почему такое может быть?
Топчик
// Почему компилятор не ругается, если в "signed char a;" поместить число 128,
// которое превышает диапазон от -128 до 127
// в отладчике будет a=-128
signed char a;
a=128;
// И для int аналогично int диапазон от -2 147 483 648 до 2 147 483 647
int x;
x=2147483648;
// в отладчике будет x=-2147483648
Возможно, из-за отсутствия флага -Wall в настройках компилятора gcc. А, вообще, это число просто будет храниться в a как -128
long d;
))))
Вот только не понял, как в памяти хранится, знаковый или беззнаковый тип, хранятся же они одинаково
Хранятся биты, а как они интерпретируются, как знаковые числа или беззнаковые определяется типом данных.
@@selfedu_rus а тогда возникает у меня ещё вопрос, вот значение переменной, в ячейке, скажем, так которая имеет адрес. Где тогда хранится тип переменной, и как все это вместе держится (тип и значение)
На сколько я понял, на этапе компиляции появляются таблицы соответствия ячеек и типа хранящейся там информации. Но после создания исполняемого файла эти таблицы исчезают: в машинном коде их нет. Если посмотреть код на ассемблере объявления переменных типа long long, char, float - код явным образом различается для разных типов. Таким образом, информация о типе переменной в конкретной части памяти "встраивается" компилятором в сам машинный код.
09:29 _прастити_ , но оно не оранжевое )
Спасибо!