|
|
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryК чему это было смешивать. Было бы так char-символьный, u/s char -целый. А тут получается что u/s char принадлежит двум пространствам. Это мне не нравится. Тогда какой смысл в этом выделении plain char. Да и вообще двусмысленность получается. Может быть я что-то не так понял..Исторически сложилось. US-ASCII - семибитный код. В асинхронных коммуникация размер символа можно было регулировать. В частности, можно было передавать семибитный код и, дополнительно, бит чётности, который использовала аппаратура. На прикладном уровне получался "свободный" старший бит и вопрос его интерпретации отдавался на откуп разработчиков системы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2014, 10:41 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Всё-равно, не понятно, почему в стандарте в одном абзаце char обзывают целочисленным, а в другом символьным ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2014, 13:28 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryВсё-равно, не понятно, почему в стандарте в одном абзаце char обзывают целочисленным, а в другом символьнымПотому, что все кодируют символы целыми числами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2014, 13:40 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov, это логично, это я понимаю. Но что мне выводить с этих 8 бит ? Выводить число, или выводить символ соотвествующий этому числу ? Да, в printf, у меня есть спецификатор, и я укажу что я хочу лицезреть. И всё ? И в чём тогда разница между char и unsigned char ? Меня спросят-какой тип у char, Саша ? Что я отвечу ? у неё нет строгого типа ? PS Теперь я могу не спрашивать даже, очевидно что в Си слабая типизация. Мне кажется это гибко. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2014, 13:52 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryИ в чём тогда разница между char и unsigned char ? Меня спросят-какой тип у char, Саша ? Что я отвечу ? у неё нет строгого типа ? Отвечай, что существует три разных типа: char, signed char и unsigned char. Правильные кодеры используют первый для симоволов, а два остальных - для чисел. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2014, 13:57 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
1. Объект объявленный как char имеет размер достаточный для хранения basic execution character set. То есть можно утверждать: char символьный тип. В С/С++ нет символьных типов вообще. Есть только числа. 2. Не везде char будет занимать 1 байт.(больше предположение) Вроде как стандарт именно гарантирует, что размер char -- 1 байт. 3.signed char и unsigned char - принадлежат множеству целых типов (standart integer types). Да 4. Объём памяти выделенный на plain char и u/s char одинаков. Да 5. char, signed char, unsigned char это разные вещи. И никто из них не может рассматриваться попарно равным. Не совсем. signed char, unsigned char -- это разные вещи. char -- это тип, совпадающий с одним из двух : либо signed char, либо unsigned char. Каким будет char по умолчанию, возможно, стандарт декларирует, но по факту есть настройки компиляторов, которые делают char по умолчанию signed или unsigned. 6.int=unsigned int, не существует plain int, или plain smth_type кроме char. Хотя в стандарте указывают plain int, я так понял это signed int. В общем, с int та же история, что и с char. Возможно, что стандарт как-то особо выделяет тип char в этом смысле, но это не очень важно. Идея в том, что int == signed int unsigned == unsigned int short == signed short unsigned short == unsigned short и так далее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2014, 14:00 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercury, Я хочу только тебе заметить, что таким образом ты не изучаешь язык, а изучаешь стандарт языка. Я бы не рекомендовал изучать язык по тексту стандарта. Это всё равно, что новичку-скалолазу изучать скалолазание сразу на маршруте 5-ой категории сложности. Да, если влезешь, то будешь наверное знать всё скалолазание, но вот только не факт, что влезешь. Начинай с простого. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2014, 14:04 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
"Правильные кодеры используют первый для симоволов"- только я хочу, чтобы это было закреплено в стандарте :( Он получается несовершенным ( Объясните пожалуйста подробней эту историческую особенность. Basil A. Sidorov Исторически сложилось. US-ASCII - семибитный код. В асинхронных коммуникация размер символа можно было регулировать. В частности, можно было передавать семибитный код и, дополнительно, бит чётности, который использовала аппаратура. На прикладном уровне получался "свободный" старший бит и вопрос его интерпретации отдавался на откуп разработчиков системы. не смог сделать вывод:"char должен быть и символьным и целым". Наверное вы всё корректно объяснили, но мне хватает каких-то фундаментальных знаний для понимания того, что вы хотите донести до меня. Что он ASCII 7-битный был, знал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2014, 14:05 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryне смог сделать вывод:"char должен быть и символьным и целым". char - символьный. Остальные - целые. НО! Между ними разрешено неявное преобразование. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2014, 14:10 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Ребята, правильнее думать, что в С нет вообще символьных типов. И в принципе так оно и есть -- специальных символьных операций в языке нет, а с char допустимы все арифметические операции. символьный тип же введён видимо в стандарт только для обозначения char-а. SashaMercury, есть такая книга: http://www.ozon.ru/context/detail/id/5637788/ Это по сути пересказ стандарта языка С на нормальном языке. Если уж так серьёзно погружаться хочешь в язык, рекомендую её читать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2014, 14:41 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Я учту все мнения, спасибо :) Думаю, в дальнейшем некоторые вещи прояснятся сами. MasterZiv, пытался пользоваться функцией fopen, пришлось искать её в стандарте, наткнулся на незнакомый идентификатор в её прототипе-restrict, потому пришлось сначала изучить типы данных, затем разберусь с restrict, затем с fopen, а затем уже поcчитаю пробелы и знаки табуляции в 1.txt. PS Мне думается что любой тип данных, по сути, числовой, в любом языке программирования ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2014, 14:54 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryPS Мне думается что любой тип данных, по сути, числовой, в любом языке программирования Ты глубоко неправ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2014, 15:37 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryВсё-таки про _Bool очень интересно, такое именование не просто так. Мне кажется, это связано с тем, что на этот тип хватит и бита, а выделяется байт, со всеми вытекающимиВ принципе - верно, это наименование сделано в учебнике с прицелом на "использовать минимальный возможный объем для хранения". Но минимальный возможный объем это всегда байт. Так что... SashaMercuryЕщё возник один простой вопрос. Верны ли предложения ниже ? 1. Объект объявленный как char имеет размер достаточный для хранения basic execution character set. То есть можно утверждать: char символьный тип. 2. Не везде char будет занимать 1 байт.(больше предположение) 3.signed char и unsigned char - принадлежат множеству целых типов (standart integer types). 4. Объём памяти выделенный на plain char и u/s char одинаков. 5. char, signed char, unsigned char это разные вещи. И никто из них не может рассматриваться попарно равным. 6.int=unsigned int, не существует plain int, или plain smth_type кроме char. Хотя в стандарте указывают plain int, я так понял это signed int. 1. Да, утверждать это можно, но только если дашь правильное определение символьного типа. 2. Везде. 3. Да 4. "plain char" == "signed char" 5. Нет. char==signed char. Но signed char != unsigned char 6. Нет. int == signed int SashaMercuryНесколько раз встретил "alignment requirements" . Забыл сразу спросить про то, как правильно это понимать. Для этого тебе надо окунутся слегка в схемотехнику. Байты в памяти обычно хранятся не по отдельности а группами. Эти группы называются "слово". Бывают машины в которых размер слова это один байт, но они чрезвычайно редки. За счет того что компьютер физически не может переслать из памяти в регистр (и обратно) один байт и всегда работает целиком со словом это приводит к "alignment requirements". Например, если тебе надо работать с одним байтом - процессор выкачает из памяти все слово, но проигнорирует старшие байты. Если тебе надо прочитать слово которое хранится в памяти "не правильно", начало в одном физическом слове, а конец в другом, то зависит от процессора - одни процессоры просто откажутся это делать и программа умрет, а другие (x86) сделают два чтения - прочитают оба физических слова, и сдвинут их как нужно прежде чем положить результат в регистр, это естественно намного медленнее чем чтение правильно лежащего слова. В С/С++ это выражается в том, что: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Компилятор сам следит за alignment и старается не резать много-байтовые типы между физическими словами. Это одна из причин почему для каждого типа компьютеров нужен свой компилятор - компилятор должен знать размеры слова. И обозначение 32-bit, 64-bit это как раз и есть размеры слова. И кстати, если ты пишешь под Винды и привык к типу двух-байтовому типу WORD или четырех-байтовому DWORD - это страшное наследие далекого прошлого, когда Винды были версии 1.0 и работали на 16-и битном процессоре, там действительно слова были по 16 бит. А потом, микрософты просто поленились обновить эти обозначения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2014, 18:22 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercury6.int=unsigned int int=signed int ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2014, 18:24 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
char может быть как знаковым так и нет в зависимости от настроек компилятора. Поэтому правильнее считать его отличающимся от обоих и никогда не смешивать. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2014, 18:29 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
White Owl4. "plain char" == "signed char" Нет. char, signed char, unsigned char - 3 разных типа. Единственное что у них равное - размер. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ЗЫ. Для SashaMercury - это С++ если чо :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2014, 18:33 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
А вот пример демонстрирующий что и в С char и signed/unsigned char тоже разные типы: Код: plaintext 1. 2. 3. 4. compitererror: conflicting types for 'tt' void tt(signed char c) ^ note: previous declaration of 'tt' was here void tt(char c); Аналогично и с unsigned char ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2014, 18:43 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. На выходе 1, но видимо это не обязательно ? Размер 8 Байт, значит для хранения структуры используется одно слово(у меня 64битная ОС). Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Что показывает этот пример ? Что я могу делать явное приведение типов к p/s/u char ? Код: plaintext 1. Хороший пример с прототипом)), действительно компилятор ругается. White Owl , я конечно не идеально понял, но общее представление о том что вы рассказывали иметь буду ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2014, 05:01 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryЧто показывает этот пример ? Что я могу делать явное приведение типов к p/s/u char ? Нет. Пример показывает что так как это 3 разных типа, то можно перегрузить функцию test каждым из них. Если бы какие-то из типов совпадали, то была бы ошибка дублирования определения функции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2014, 13:06 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Сделай: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2014, 16:42 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercury Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. На выходе 1, но видимо это не обязательно ? Размер 8 Байт, значит для хранения структуры используется одно слово(у меня 64битная ОС). С двумя полями порядок не меняет размер. А вот с 3 и более полями размер зависит от порядка, как раз из-за выравнивания. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2014, 17:12 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
White Owl, Anatoly Moskovsky, на выходе 12 8 для примера предложенного последним. Последний вопрос по этой теме. Дана структура с n количеством полей int, char перемешанных в любом порядке. Можем ли мы утверждать какой объём будет занимать эта структура только исходя из логических выкладок ? Какая информация для этого нужна о процессоре и ОС ?(разрядность вероятно). Либо мы не можем делать 100% предположения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2014, 03:33 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
VS Express ругается на _Bool кстати ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2014, 03:34 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryVS Express ругается на _Bool кстати _Bool - из стандартного С, а VS никакие версии стандарта С не поддерживает. В VS развивали только С++. (Впрочем обещали исправиться и допилить С) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2014, 03:44 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryWhite Owl, Anatoly Moskovsky, на выходе 12 8 для примера предложенного последним. Последний вопрос по этой теме. Дана структура с n количеством полей int, char перемешанных в любом порядке. Можем ли мы утверждать какой объём будет занимать эта структура только исходя из логических выкладок ? Какая информация для этого нужна о процессоре и ОС ?(разрядность вероятно). Либо мы не можем делать 100% предположения. В общем случае - зависит от компилятора и платформы. Точнее - зависит от параметра packing по умолчанию. В VS это 8 для 32-битных процессоров, 16 для 64-битных. (Для GCC - не помню) packing - это предельное выравнивание, которое применяется даже если у типа больший размер. Зная только этот параметр и выравнивания отдельных типов можно точно рассчитать размеры структур. В частном случае - для int и char - выравнивания не превышают packing почти на любой платформе, поэтому для всех основных платформ и компиляторов размер структуры с этими типами будет одинаковым, т.е. его можно посчитать не привязываясь к платформе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2014, 04:01 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38639078&tid=2018847]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
162ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
65ms |
get tp. blocked users: |
1ms |
| others: | 214ms |
| total: | 481ms |

| 0 / 0 |
