artemkad 89 17 июня, 2009 Опубликовано 17 июня, 2009 · Жалоба Что значить когда-нибуть? Уже! Полюбуйтесь на один из новых чипов и найдите слабое место http://www.luminarymicro.com/products/lm3s9b95.html Ну и ? Полюбовался. Большой, дорогой (больше 8$), жутко крутой, ... Вот только токи потребления в доке не указаны. Наверное, что-бы потенциальных клиентов заранее не пугать :smile3046: ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 65 17 июня, 2009 Опубликовано 17 июня, 2009 · Жалоба Хм... main.c: #include <stdio.h> [...] hello! bool = true bool = true bool = true bool = false Без обману, говорите? :-) Интересный пример. :) Поглядим. Согласно правилам языка (я по ++ным правилам разбираю, но думается, что в С99) оно так же. Итак, инициалиация а = 2. Согласно правилам при присвоении булу результата арифметического выражения, если результат ноль, то присваивается false, иначе - true. Таким образом, после инициализации в а - true. Далее. а = ~а Опять арифметическое выражение. При использовании була в арифметических выражениях он преобразоывается согласно правил к целому: если false, то в 0, если true - то в 1. У нас была true, значит при ~a имеем а преобразован (пусть int 16 бит) в 0x0001, а после инверсии - 0xfffe. Ну, и при присвоении обратно к булу - ненулевое значение преобразовывается в... правильно - в true. :) Дальше все так же. А вот когда вы применили логическую операцию - тут никаких преобразований к целому не последовало, и был получен логичный результат. Никакого обмана. :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 18 17 июня, 2009 Опубликовано 17 июня, 2009 · Жалоба Никакого обмана. :) Выкрутились :) Я, помнится, всё это читал. Но забыл:) А с позиции здравого смысла очень сложно принять, что ~(любой bool) - это true. Но конечно этот bool лучше, чем ничего. Он даже индийское сравнение (if somevar == true) правильно обрабатывает:-) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 29 17 июня, 2009 Опубликовано 17 июня, 2009 · Жалоба Но конечно этот bool лучше, чем ничего. Он даже индийское сравнение (if somevar == true) правильно обрабатывает:-) Не понял... (if somevar != false) я ещё понимаю... а это как правильно обработать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 65 17 июня, 2009 Опубликовано 17 июня, 2009 · Жалоба Выкрутились :) Я, помнится, всё это читал. Но забыл:) А с позиции здравого смысла очень сложно принять, что ~(любой bool) - это true. Но конечно этот bool лучше, чем ничего. Он даже индийское сравнение (if somevar == true) правильно обрабатывает:-) Ну, вы же помните разницу между & и && (| и ||, ~ и !). Вот тут и всплывает разница между bool и int. Достаточно помнить, что нативные операции над bool - это только лишь логические операции, а при использовании остальных начинаются преобразования типов со всеми вытекающими. Например, если вы целое присваиваете типу с плавающей точкой, то потенциально теряете точность. Это объяснимо и логично. Имхо, вся сложность C/C++ как языков и содержиться в подобных нюансах, коих весьма немало. "Дьявол прячется в мелочах" (с) :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
777777 0 17 июня, 2009 Опубликовано 17 июня, 2009 · Жалоба А с позиции здравого смысла очень сложно принять, что ~(любой bool) - это true. С позиции здравого смысла сложно понять, зачем к логическим переменным применять побитовые операции. Но если программист просит - компилятор честно их выполняет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rst7 5 17 июня, 2009 Опубликовано 17 июня, 2009 · Жалоба С позиции здравого смысла сложно понять, зачем к логическим переменным применять побитовые операции. С позиций здравого смысла вообще нет резона плодить лишние сущности типа bool. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sonycman 1 17 июня, 2009 Опубликовано 17 июня, 2009 · Жалоба А может кто подскажет, уважаемые, где можно почитать про хитрый uint_fast8_t? Этот тип что, обрабатывает байт как двойное слово, без накладывания масок? Но как тогда будет обработан инкремент 0хff? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Pasha 0 17 июня, 2009 Опубликовано 17 июня, 2009 · Жалоба А может кто подскажет, уважаемые, где можно почитать про хитрый uint_fast8_t? Этот тип что, обрабатывает байт как двойное слово, без накладывания масок? Но как тогда будет обработан инкремент 0хff? <stdint.h> расскажет Вам обо всем. :) Обратите внимание, что компилеру по барабану, как назовется этот хитрый тип, т.к. он не встроенный - все настройки на платформенные особенности отданы на откуп прагмам и атрибутам. В общем, под таким углом зрения - ничего сложного и удивительного. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sonycman 1 17 июня, 2009 Опубликовано 17 июня, 2009 · Жалоба <stdint.h> расскажет Вам обо всем. :) Обратите внимание, что компилеру по барабану, как назовется этот хитрый тип, т.к. он не встроенный - все настройки на платформенные особенности отданы на откуп прагмам и атрибутам. В общем, под таким углом зрения - ничего сложного и удивительного. Хм, получается, что uint_fast8_t есть просто dword. На кой он нужен тогда. Можно сразу напрямую задать тип dword... :rolleyes: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Pasha 0 17 июня, 2009 Опубликовано 17 июня, 2009 · Жалоба На кой он нужен тогда. :rolleyes: На той, что: 1) Как портировать софтину с АВР-8бит на АРМ, если у исходной подавляющее большинство локальных переменных char, а если это перенести на 32-битовые регистры - получим оверхед по выделению байта ? Говорено-переговорено на эту тему. 2)Как только появляется необходимость в дополнительных атрибутах (т.е. оптимизация не может автоматом утоптать все конструкции, требуется явное указание на способ обработки данных) - она отражается в stdint.h Для программера ничего не меняется - он пользуется uint8_t когда надо явно указать размер (обмен с другими девайсами, например), и _fast и _least когда надо положить алгоритм оптимально на архитектуру. Лично я пока не сталкивался с острой необходимостью в uint_least8_t. Может кто прокомментирует, где оно применимо? Что до _fast - то тут все ясно - вычисления с использованием uint_fast8_t будут быстрее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 65 17 июня, 2009 Опубликовано 17 июня, 2009 · Жалоба С позиций здравого смысла вообще нет резона плодить лишние сущности типа bool. Вообще? Или там, где нет нативного типа? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rst7 5 17 июня, 2009 Опубликовано 17 июня, 2009 · Жалоба Вообще? Или там, где нет нативного типа? Как по мне - так "вообще". Достаточно обычного С-шного соглашения о том, что ложь - ==0, истина - !=0. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sonycman 1 17 июня, 2009 Опубликовано 17 июня, 2009 · Жалоба _Pasha Спасибо, понятно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 17 июня, 2009 Опубликовано 17 июня, 2009 · Жалоба <stdint.h> расскажет Вам обо всем. :) Да ну? typedef __UINT_FAST8_T_TYPE__ uint_fast8_t; Что поняли из рассказа? ...этот хитрый тип, т.к. он не встроенный... или встренный. Только вот поведение тоже не всегда устраивает :( Лисно у меня это кончилось тем, что завел свои типы, естественно и более-менее разбираюсь вручную, или по быстрому назначаю на них поминаемые fast8 least8 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться