Перейти к содержанию
    

Что значить когда-нибуть? Уже! Полюбуйтесь на один из новых чипов и найдите слабое место

http://www.luminarymicro.com/products/lm3s9b95.html

 

Ну и ? Полюбовался. Большой, дорогой (больше 8$), жутко крутой, ... Вот только токи потребления в доке не указаны. Наверное, что-бы потенциальных клиентов заранее не пугать :smile3046: ...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Хм...

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. :)

 

Дальше все так же. А вот когда вы применили логическую операцию - тут никаких преобразований к целому не последовало, и был получен логичный результат.

 

Никакого обмана. :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Никакого обмана. :)

 

Выкрутились :) Я, помнится, всё это читал. Но забыл:) А с позиции здравого смысла очень сложно принять, что ~(любой bool) - это true.

Но конечно этот bool лучше, чем ничего. Он даже индийское сравнение (if somevar == true) правильно обрабатывает:-)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Но конечно этот bool лучше, чем ничего. Он даже индийское сравнение (if somevar == true) правильно обрабатывает:-)

Не понял...

(if somevar != false) я ещё понимаю... а это как правильно обработать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Выкрутились :) Я, помнится, всё это читал. Но забыл:) А с позиции здравого смысла очень сложно принять, что ~(любой bool) - это true.

Но конечно этот bool лучше, чем ничего. Он даже индийское сравнение (if somevar == true) правильно обрабатывает:-)

Ну, вы же помните разницу между & и && (| и ||, ~ и !). Вот тут и всплывает разница между bool и int. Достаточно помнить, что нативные операции над bool - это только лишь логические операции, а при использовании остальных начинаются преобразования типов со всеми вытекающими. Например, если вы целое присваиваете типу с плавающей точкой, то потенциально теряете точность. Это объяснимо и логично.

 

Имхо, вся сложность C/C++ как языков и содержиться в подобных нюансах, коих весьма немало. "Дьявол прячется в мелочах" (с) :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А с позиции здравого смысла очень сложно принять, что ~(любой bool) - это true.

С позиции здравого смысла сложно понять, зачем к логическим переменным применять побитовые операции. Но если программист просит - компилятор честно их выполняет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

С позиции здравого смысла сложно понять, зачем к логическим переменным применять побитовые операции.

 

С позиций здравого смысла вообще нет резона плодить лишние сущности типа bool.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А может кто подскажет, уважаемые, где можно почитать про хитрый uint_fast8_t?

Этот тип что, обрабатывает байт как двойное слово, без накладывания масок?

Но как тогда будет обработан инкремент 0хff?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А может кто подскажет, уважаемые, где можно почитать про хитрый uint_fast8_t?

Этот тип что, обрабатывает байт как двойное слово, без накладывания масок?

Но как тогда будет обработан инкремент 0хff?

 

<stdint.h> расскажет Вам обо всем. :) Обратите внимание, что компилеру по барабану, как назовется этот хитрый тип, т.к. он не встроенный - все настройки на  платформенные особенности отданы на откуп прагмам и атрибутам. В общем, под таким углом зрения - ничего сложного и удивительного.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

<stdint.h> расскажет Вам обо всем. :) Обратите внимание, что компилеру по барабану, как назовется этот хитрый тип, т.к. он не встроенный - все настройки на  платформенные особенности отданы на откуп прагмам и атрибутам. В общем, под таким углом зрения - ничего сложного и удивительного.

Хм, получается, что uint_fast8_t есть просто dword.

На кой он нужен тогда. Можно сразу напрямую задать тип dword... :rolleyes:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На кой он нужен тогда.   :rolleyes:

На той, что:

 

1) Как портировать софтину с АВР-8бит на АРМ, если у исходной подавляющее большинство локальных переменных char, а если это перенести на 32-битовые регистры - получим оверхед по выделению байта ? Говорено-переговорено на эту тему.

 

2)Как только появляется необходимость в дополнительных атрибутах (т.е. оптимизация не может автоматом утоптать все конструкции, требуется явное указание на  способ обработки данных) - она отражается в stdint.h

 

Для программера ничего не меняется - он пользуется uint8_t когда надо явно указать размер (обмен с другими девайсами, например), и _fast и _least когда надо положить алгоритм оптимально на архитектуру. Лично я пока не сталкивался с острой необходимостью в uint_least8_t. Может кто прокомментирует, где оно применимо? Что до _fast - то тут все ясно - вычисления с использованием uint_fast8_t будут быстрее. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

С позиций здравого смысла вообще нет резона плодить лишние сущности типа bool.

Вообще? Или там, где нет нативного типа?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вообще? Или там, где нет нативного типа?

 

Как по мне - так "вообще". Достаточно обычного С-шного соглашения о том, что ложь - ==0, истина - !=0.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

<stdint.h> расскажет Вам обо всем. :)

Да ну?

typedef __UINT_FAST8_T_TYPE__ uint_fast8_t;

Что поняли из рассказа?

...этот хитрый тип, т.к. он не встроенный...

или встренный. Только вот поведение тоже не всегда устраивает :( Лисно у меня это кончилось тем, что завел свои типы, естественно и более-менее разбираюсь вручную, или по быстрому назначаю на них поминаемые fast8 least8

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...