Автор Тема: Tипове данни в С  (Прочетена 19532 пъти)

0 Потребители и 1 Гост преглежда(т) тази тема.

VeNuMs

  • Full Member
  • ***
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 131
Tипове данни в С
« -: 20 Декември 2009, 15:51:09 »
** Тази тема дискутира:: Tипове данни в С **
Автор: Николай Янев
« Последна редакция: 23 Април 2015, 20:54:59 от Avalanche »

Stilgar

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 0
  • -Получени: 42
  • Публикации: 1406
    • The Sietch
Отг:Tипове данни в С
« Отговор #1 -: 20 Декември 2009, 15:51:45 »
 " двоична точност " ?

kerkenez

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 2
  • -Получени: 14
  • Публикации: 1205
Отг:Tипове данни в С
« Отговор #2 -: 20 Декември 2009, 15:52:26 »
Няма ли bool ?

Stilgar

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 0
  • -Получени: 42
  • Публикации: 1406
    • The Sietch
Отг:Tипове данни в С
« Отговор #3 -: 20 Декември 2009, 15:53:01 »
ц

walpsup

  • Full Member
  • ***
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 173
Отг:Tипове данни в С
« Отговор #4 -: 20 Декември 2009, 16:27:32 »
Разликата между float и double
float (-3.4*10^38; 3.4*1^38) и заема 4B ОП(Оперативна памет);
double (-1.74*10^308; 1.74*10^38) и заема 8B OП

Иначе казано
float         4 bytes (32 bits)     10-38 до 1038          5 числа
double        8 bytes (64 bits)     10-308 дo 10308       15 числа
long double  10 bytes (80 bits)     10-4932 дo 104932     19 числа

Разликата е много тънка ..
А за булевия тип 1B заема (true,false)

Stilgar

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 0
  • -Получени: 42
  • Публикации: 1406
    • The Sietch
Отг:Tипове данни в С
« Отговор #5 -: 20 Декември 2009, 16:33:35 »
Забрави да напишеш  " с моя компилатор "
Да не пропускаме важните уточнения, че да не стават грешки:)

VeNuMs

  • Full Member
  • ***
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 131
Отг:Tипове данни в С
« Отговор #6 -: 20 Декември 2009, 18:31:10 »
Tип Bool в С няма.

Stilgar

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 0
  • -Получени: 42
  • Публикации: 1406
    • The Sietch
Отг:Tипове данни в С
« Отговор #7 -: 20 Декември 2009, 19:37:56 »
VeNuMs още не си оправил глупостта за  " двоичната точност "

Освен това си изпуснал long/short, а това, че си ги подредил по размер не може да го твърдиш просто така. Трябва да кажеш на кой компилатор и с какви опции или поне  " най-често, но не винаги "

VeNuMs

  • Full Member
  • ***
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 131
Отг:Tипове данни в С
« Отговор #8 -: 20 Декември 2009, 19:42:00 »
Това с двоична точност не е глупост и на мен така са ми го преподавали. long и double ще ги включа във някой друг урок, написал съм, че това са най-основните типове. За компилатораа ако си чел урока за компилаторите съм написал, че съм с gcc.

Stilgar

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 0
  • -Получени: 42
  • Публикации: 1406
    • The Sietch
Отг:Tипове данни в С
« Отговор #9 -: 20 Декември 2009, 20:44:08 »
Не ме интересува как са ти го преподавали аз ти казвам (ако искаш си представи, че ти го преподавам), че е глупост.

А кажи сега какво значи  " двоична точност "  като не е глупост? Още повече защо float не е с  " двоична точност "  (каквото и да е това), а double е?

Въпросът за размерите на типовете е, че така написано няма смисъл. Вярно е за всеки компилатор, за който се сещам, но не винаги е вярно за езика C.

Ето например walpsup е дал някакви размери, които не знам от къде е взел, но в (може би) най-популярния C++ компилатор в света (този на Microsoft) не са така. Не че неговите са грешни а този на Microsoft е верен. Просто се различават защото C спецификацията не казва какви ще са размерите на типовете, а само релациите между тях. (char >= short >= int >= long)

VeNuMs

  • Full Member
  • ***
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 131
Отг:Tипове данни в С
« Отговор #10 -: 20 Декември 2009, 20:53:41 »
За двойчната тчност провери в някоя книга да видиш какво пише. За Майкрософтския компилатор не съм съгласен, че е най-популярен. Ти пак пишеш short и long, тях ти казах че щеги обясня по-нататък, а тези както съм ги подредил във всички компилатори са така по големина.

Stilgar

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 0
  • -Получени: 42
  • Публикации: 1406
    • The Sietch
Отг:Tипове данни в С
« Отговор #11 -: 20 Декември 2009, 21:00:03 »
Откъде знаеш? На всички компилатори ли си ги пробвал?

Книгите, в които пише  " двоична точност "  може да ги пуснеш в коша. Т ' ва прилича на отвратителен превод на  " double precision " .

Double = двойна
Binary = двоична

Разликата е ОГРОМНА!

VeNuMs

  • Full Member
  • ***
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 131
Отг:Tипове данни в С
« Отговор #12 -: 20 Декември 2009, 21:04:32 »
Добре char няма как да е по-голямо от int. int неможе да е по-голямо от float или double. За  " двоична точност "  искам да се извиня, наистина е  " двойна " . Грешката е моя. Благодаря, че ме поправи.

Stilgar

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 0
  • -Получени: 42
  • Публикации: 1406
    • The Sietch
Отг:Tипове данни в С
« Отговор #13 -: 20 Декември 2009, 21:19:31 »
Добре е да кажеш двойна на кое щото то е кръстено така за тея, които знаят що е то float(single precision) по този стандарт http://en.wikipedia.org/wiki/IEEE_754

char спокойно може да е по-голямо от float и дори от double (но не и от int). Както казах C НЕ дефинира размера на типовете а само, че char >= short >= int >= long.

Първо мислих, че е доста тъпо, че мога да си направя C компилатор, в които char, short, int и long всичките са по 13 байта. После един приятел, които е C++ гуру (даже има негови неща в стандартните C++ библиотеки) ме светна, че всъщност този мой 13 байтов компилатор би бил изключително ефективен за машини, които могат да четат и пишат от паметта само на парчета по 13 байта. Не че има такива машини, но една от основните идеи на C е да е portable и да може да се направи максимално ефективен компилатор за съответната платформа. Затова много неща в C са оставени недефинирани или неспецифицирани (има разлика между тези двете). Вероятно няма да видиш компилатор за x86 PC, които да има char по-голям от float, но това не значи, че не съществува някаква шантава архитектура на която float е 2 байта пък char е 4. Пък и дори да не съществува такава архитектура от гледна точка на ЕЗИКА C изказването ти не е винаги вярно.

VeNuMs

  • Full Member
  • ***
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 131
Отг:Tипове данни в С
« Отговор #14 -: 20 Декември 2009, 21:23:11 »
Възможно е аз не съм се сблъсквал с такъв компилатор и за това се изказах така. :)