Получить адрес байта и бита
- Войдите на сайт для отправки комментариев
Чт, 20/05/2021 - 22:38
Никак не соображу как это сделать
У меня есть 128 "флагов", это 16 байт информации.
WriteBits(31); void WriteBits(byte adres) { byte NomByte= adres/8; Serial.print("Byte="); Serial.print(NomByte); Serial.println(""); Serial.print("Bits="); }
Я обращаюсь к флагу 22 - это 2 байт 6 бит.
Байт получила, это 22/8=целое число 2
А бит раасчитать?
Ну так вычесть из 22 два раза по 8.
Т.е. частное от деления на 8 - это номер байта, а остаток - номер бита.
Это понятно.
22/8=2.75 (2 это байт, 7-1=6 - это бит)
31/8=3.875 (2 это байт, 8-1=7 - это бит)
Это надо float преобразовать в char и распарсить символы до точки и первый символ после точки
Зачем? Есть же «%» (он же - остаток от деления). 22 / 8 = 2; а потом 22 % 8 = 6. Все. :-) (соответственно в целых числах).
Это понятно.
22/8=2.75 (2 это байт, 7-1=6 - это бит)
31/8=3.875 (2 это байт, 8-1=7 - это бит)
А вот мне совершенно непонятно.
Но, в любом случае, делить надо нацело.
Это надо float преобразовать в char и распарсить символы до точки и первый символ после точки
Если нужно текстовое представление числа до одного знака после запятой, не нужно никакого float: сначала умножаешь на 10, потом вычисляешь цифры как положено, через частное и остаток. Ну а перед последней цифрой добавляешь точку.
В общем, я совсем запутался. Что нужно в результате?
Зачем? Есть же «%» (он же - остаток от деления). 22 / 8 = 2; а потом 22 % 8 = 6. Все. :-) (соответственно в целых числах).
Спасибо.
У всех битов в байте одни и тот же адрес, поскольку в восьмиразрядных системах мы адресуемся к байту. Бит - часть байта, одна восьмая часть. У бита есть только положение в байте, нулевой, первый, второй.... седьмой. Стандартные логические переменные (булевы) в си представлены байтом. Поэтому не стоит путать bit и bool.
К чему это я..... зачем.... Ну пусть будет.
А где о bool было? Я что-то не понял к чему это...
А где о bool было? Я что-то не понял к чему это...
Я ж и сам не понял... Просто частенько люди считают что в си bool=бит, поскольку bool имеет только два состояния.
Экономно было бы, да не так это. )))
Поэтому я предпочитаю вместо bool -> byte. Больше ста вариантов, а не два )))
А где о bool было? Я что-то не понял к чему это...
Я ж и сам не понял... Просто частенько люди считают что в си bool=бит, поскольку bool имеет только два состояния.
Состояния то два, в вот переменная под bool имеет 255 как минимум состояний.
Хорошее уточнение) Еще можно сказать "более 255 состояний")))
Я бы попросил.... состояний два, а значений 256.
31/8=3.875 (2 это байт, 8-1=7 - это бит)
3.875 (2 это байт ... это как так вышло ???
31/8=3.875 (2 это байт, 8-1=7 - это бит)
3.875 (2 это байт ... это как так вышло ???
Полтора землекопа... )))
31/8=3.875 (2 это байт, 8-1=7 - это бит)
3.875 (2 это байт ... это как так вышло ???
Полтора землекопа... )))
почему землекопа? помнится в отчетах охотхозяйства фигурировало, что ими убито 3.75 волка и 2.17 лисицы )))
31/8=3.875 (2 это байт, 8-1=7 - это бит)
3.875 (2 это байт ... это как так вышло ???
Полтора землекопа... )))
почему землекопа?
https://youtu.be/ICqPUwOGnxw
Это мультик нашего детства "В стране невыученных уроков". Ты не шпиён мериканский, засланный к нам ;)))) Ежели наши родные "калчерал референсес" не понимаешь?
Я бы попросил.... состояний два, а значений 256.
, а false однозначно определён.
31/8=3.875 (2 это байт, 8-1=7 - это бит)
3.875 (2 это байт ... это как так вышло ???
Решили вопрос уже, зачем не в отвлечённых такой флейм?! Модераторы тут есть вообще? Или что?
Я бы попросил.... состояний два, а значений 256.
Да ну? Никаких 255 - только 1. (Хорошо бы... пива. Нет, только вино.)
Ну да, если объявлен как bool, то только 0 и 1 . А если как байт? Его тоже можно использовать в конструкции if ( byte ) ... И даже сработает. Это я в приложении к тому, что бы биты использовать.
Но начали то за bool.) А если byte вместо bool, то это уже быдлокодерство, либо хацкерство.)
Ну да, если объявлен как bool, то только 0 и 1 .
Отнюдь.
В Си bool относится к целочисленным типам, соответственно, может принимать не менее 256 значений (в зависимости от реализации может также 65536 или 4294967296 значений).
Отнюдь. В Си нет встроенного типа bool. В С99 только подключается через stdbool.h. Но мы то и не о Си вовсе.
В Си bool относится к целочисленным типам, соответственно, может принимать не менее 256 значений (в зависимости от реализации может также 65536 или 4294967296 значений).
Это ты с Виндовым LONGBOOL путаешь, в стандартном Си от кернигана bool == int
В Си bool относится к целочисленным типам, соответственно, может принимать не менее 256 значений (в зависимости от реализации может также 65536 или 4294967296 значений).
Это ты с Виндовым LONGBOOL путаешь, в стандартном Си от кернигана bool == int
А int как раз от 65536 до 4294967296 в зависимости от реализации. Что не так?
Что не так?
В Си int не зависит от платформы и везде 16-ти битный. И не 65536 у него максимум, а 32767
Что не так?
В Си int не зависит от платформы и везде 16-ти битный. И не 65536 у него максимум, а 32767
1. Откомпилируй для Arduino Due "Serial.println(sizeof(int));" и узнай размер int в байтах. В биты, надеюсь, сам переведешь.
2. Речь не о "максимум", а о количестве значений. Для 16-разрядного int это будет от -32768 до 32767 - ровнехонько 65536 значений. Для 32-разрядного int (когда обнаружишь, что таковые в природе встречаются) - посчитаешь сам.
PS. По K&R (стр.16) "Точность как INT, TAK и FLOAT зависит от конкретной машины".
Да, ты прав, невнимательно я читал Кернигана с Ритчи.
Это проще понимать так. Int - самый удобный для процессора, т.е. его розрядность, но не 8 а больше. Bool - просто его розрядность.
Относительно bool. Наткнулся я на https://server.179.ru/tasks/cpp/total/ - уроки по С/С++. И что ж мы там читаем:
В Си bool относится к целочисленным типам, соответственно, может принимать не менее 256 значений (в зависимости от реализации может также 65536 или 4294967296 значений).
Не может. Разве что Вы его туда через union запихаете, но это уже "залезание под юбку" и "undefined behavior" (мы это недавно обсуждали). А так если использовать _Bool, то при любой операции (присваивание целого, например), всё будет преобразовано к 0 и 1. Кстати, там есть забавная ремарка: "While the number of bits in a _Bool object is at least CHAR_BIT, the width (number of sign and value bits) of a _Bool can be just 1 bit".
Отнюдь. В Си нет встроенного типа bool. В С99 ...
В более поздних появился _Bool - это честное ключевое слово и честный тип.
уроки по С/С++. И что ж мы там читаем:
Верно, но лишь до тех пор, пока мы с нею правильно обращаемся. Если начинать "лезть под юбку", то можно и нарваться на: "Using a bool value in ways described by this document as “undefined”, such as by examining the value of an uninitialized automatic object, might cause it to behave as if it is neither true nor false" (стр. 92 по файлу)
уроки по С/С++. И что ж мы там читаем:
Брехня. Более того, в стандарте есть специальная ремарка: "sizeof(bool) is not required to be 1" (стр. 133 по файлу)
Так что, действительно
Ужос! "Никому нельзя верить."(
главное, чтобы об этом жена не узнала )))
А почему нельзя сделать пакет на 8 битных переменных и пихать в память? Ну что бы 1 переменная - 1 байт, а 8 опять 1 байт.
Да, об этом в курсе. Но меня больше удивляет по ссылке, якобы то, что битовые операции с bool равносильны логическим, а особенно ~.
А почему нельзя сделать пакет на 8 битных переменных и пихать в память? Ну что бы 1 переменная - 1 байт, а 8 опять 1 байт.
Наверное, потому, что Клапауций запретил. А так (пока он не видит) можно и даже тема с готовым кодом была.
А как тему эту на форуме отыскать?, через месяц свою откопать трудно.
Ну, например - http://arduino.ru/forum/programmirovanie/sizeofbool#comment-462101 здесь как сделать массив bool'ов, чтобы он лишнего места не жрал.
Хотя было ещё штук пять как минимум, поиском попробуйте.
Ну, например - http://arduino.ru/forum/programmirovanie/sizeofbool#comment-462101 здесь как сделать массив bool'ов, чтобы он лишнего места не жрал.
Хотя было ещё штук пять как минимум, поиском попробуйте.
Женя! А у тебя нет примера написанного класса "бит аррей" с переопределенным присваиванием, индексом и классом-хелпером? Просто чтобы показать народу. Мне наверно часок потребуется, чтобы написать. Начал было, но подумал, что кто-то уже наверняка писал подобное и не раз.
Сорри. уже увидел!