https://www.reddit.com/r/learnprogramming/comments/p9pgxl/c_why_is_the_data_type_char_considered_an_integer/#:~:text=A%20char%20is%20an%20integer,as%20numbers%20on%20a%20computer.
Символьные и целочисленные литералы в си по умолчанию инт, это влияет лишь на взаимодействие с другими объектами. Не понимаю, что у тебя вызывает вопрос. Тебе нужен был байт, ты байт и записал, тебя не должно беспокоить, что числовой литерал имеет тип инт в данном случае. (Ну скастится оно к чару, делов то, хотя компиль не настолько глуп), в той же арме у тебя 255 положится в 4-байтный регистр (wX/rX в зависимости от версии арма), а потом в память запишется 1 байт из этого регистра, а может и не запишется, если компиль посчитает, что можно и в регистре хранить, а может и вообще этой переменной в твоей программе не будет, т.к. она не влияет на окружение))
Меня смутило что в переменной с размером 1 байт, храниться целое число с типом инт, который занимает одно мш слово.
Максимум тебя может опечалить, что инструкция для ia32/amd64 гипотетически может быть длиннее, но опять же, для компиля это совсем простые штуки, о которых даже думать не надо.
Машинное слово... Сам придумал, али кто подсказал?) Как вообще инт связан с машинным словом, да даже размер указателя с ним по факту не связан?? И нет, в переменной у тебя хранится именно байт и точка. (Что там решит компилятор тебя сейчас не касается, он может оперировать тем, что эффективнее для архитектуры и для него самого).
Ну так инт 4 байта ну в зависимости архитектуры, 4 байта = одно машинное слово
Возможно из за того, что размер Инта выражают через машинное слово
Но это не точно
Ага, и чар через машинное слово, и шорт, и лонг😂 Интересно, а флот связан с машинным словом? А ещё интересно, как относятся к машинному слову типы больше его самого?)
Ну если мой 255 будет храниться в одном байте, мне уже все равно под каким типом он интерпретирует 255, главное что под него будет выделен 1 байт.
Мм, на amd64 у тебя инт 4 байта, а машинное слово 8, как быть?
Да не, просто в винапи допустим DWORD определяют как инт
Ну говорю же, в зависимости архитектуры ну и процессора тоже)
Так это двойное слово)) Потому что слово, уж так исторически сложилось, 2 байта)
Я уже выше написал это
Потому-что раньше процессоры были 16 бит ?
Ну вот твоя программа под aarch64 Но опять же, это на О0, компиль вовсе не обязан был записывать твой байт в память, к слову, как ты видишь, под фрейм твоей функции он выделил аж 16 байт, а не 1. Так что не забивай себе голову подобной ерундой сейчас.
все, скоро в асмочате ожидается подобный вопрос
я же тебе уже писал - как ляжет карта, у тебя эта переменная не обязана иметь адреса
Обсуждают сегодня