169 похожих чатов

Что за приколи 🤨, я узнал что компилятор си целочисленные

значения хранит в int изначально если число не выходит за рамки, и подумал а что будет если хранить целое число в чаре ? ну и вот проверил, а что если я хочу хранить значение в одном байте ? зачем тогда вообще нужен чар, если в нем хранящейся будет в итоге интом ? 🤔

20 ответов

48 просмотров

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 байт из этого регистра, а может и не запишется, если компиль посчитает, что можно и в регистре хранить, а может и вообще этой переменной в твоей программе не будет, т.к. она не влияет на окружение))

123- Автор вопроса
Денис Rabbit
Символьные и целочисленные литералы в си по умолча...

Меня смутило что в переменной с размером 1 байт, храниться целое число с типом инт, который занимает одно мш слово.

Денис Rabbit
Символьные и целочисленные литералы в си по умолча...

Максимум тебя может опечалить, что инструкция для ia32/amd64 гипотетически может быть длиннее, но опять же, для компиля это совсем простые штуки, о которых даже думать не надо.

123
Меня смутило что в переменной с размером 1 байт, х...

Машинное слово... Сам придумал, али кто подсказал?) Как вообще инт связан с машинным словом, да даже размер указателя с ним по факту не связан?? И нет, в переменной у тебя хранится именно байт и точка. (Что там решит компилятор тебя сейчас не касается, он может оперировать тем, что эффективнее для архитектуры и для него самого).

123- Автор вопроса
Денис Rabbit
Машинное слово... Сам придумал, али кто подсказал?...

Ну так инт 4 байта ну в зависимости архитектуры, 4 байта = одно машинное слово

Денис Rabbit
Машинное слово... Сам придумал, али кто подсказал?...

Возможно из за того, что размер Инта выражают через машинное слово

007
Возможно из за того, что размер Инта выражают чере...

Ага, и чар через машинное слово, и шорт, и лонг😂 Интересно, а флот связан с машинным словом? А ещё интересно, как относятся к машинному слову типы больше его самого?)

123- Автор вопроса
Денис Rabbit
Машинное слово... Сам придумал, али кто подсказал?...

Ну если мой 255 будет храниться в одном байте, мне уже все равно под каким типом он интерпретирует 255, главное что под него будет выделен 1 байт.

123
Ну так инт 4 байта ну в зависимости архитектуры, 4...

Мм, на amd64 у тебя инт 4 байта, а машинное слово 8, как быть?

Денис Rabbit
Ага, и чар через машинное слово, и шорт, и лонг😂 И...

Да не, просто в винапи допустим DWORD определяют как инт

123- Автор вопроса
Денис Rabbit
Мм, на amd64 у тебя инт 4 байта, а машинное слово ...

Ну говорю же, в зависимости архитектуры ну и процессора тоже)

007
Да не, просто в винапи допустим DWORD определяют к...

Так это двойное слово)) Потому что слово, уж так исторически сложилось, 2 байта)

123- Автор вопроса
Денис Rabbit
Так это двойное слово)) Потому что слово, уж так и...

Потому-что раньше процессоры были 16 бит ?

123
Ну если мой 255 будет храниться в одном байте, мне...

Ну вот твоя программа под aarch64 Но опять же, это на О0, компиль вовсе не обязан был записывать твой байт в память, к слову, как ты видишь, под фрейм твоей функции он выделил аж 16 байт, а не 1. Так что не забивай себе голову подобной ерундой сейчас.

Денис Rabbit
screenshot Ну вот твоя программа под aarch64 Но опять же, это...

все, скоро в асмочате ожидается подобный вопрос

я же тебе уже писал - как ляжет карта, у тебя эта переменная не обязана иметь адреса

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Ребят в СИ можно реализовать ООП?
Николай
33
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
у вас два процесса. один посылает другому сигнал. у вас есть код обоих процессов? если всё не так - расскажите как оно на самом деле. а именно кто кому чего, есть-ли консоли,...
Karagy
6
Карта сайта