Views: 382
Оператор – sizeof()
Этот оператор имеет один параметр, который может быть либо тип, либо сама переменная и возвращает размер в байтах этого типа или объекта:
a = sizeof (char);
В этом примере переменной (а) будет присвоено значение 1 потому, что char однобайтовый тип.
Значение, возвращаемое функцией sizeof, является константой, поэтому всегда определяется до выполнения программы.
Например, массив
static unsigned char txferTxBuff[256]; temp = sizeof (txferTxBuff); // возвращает переменной temp размер массива 256.
а конструкция
temp1 = sizeof (*txferTxBuff); // возвращает размер элемента массива в байтах
Если chat то он всегда будет 8 бит или 1 байт, если int то тут будет зависит от используемого микроконтроллера. Например компилятор XC8 вернет значение 2 байта, а компилятор XC32 вернет значение 4 (байта). Это значит, что один элемент в разных системах занимает разное количество байт. Массив static unsigned int txferTxBuff[256] описанный в программе для PIC32 будет занимать в памяти 1024 байта.
конструкция
temp = sizeof (txferTxBuff) / sizeof (*txferTxBuff);
вычисляет именно размер массива.
Приоритет операторов
При написании сложных выражений с несколькими операндами, мы можем иметь некоторые сомнения, относительно какой операнд вычисляется сначала, а какой позднее. К примеру, в этом выражении:
a = 5 + 7 % 2
Мы может сомневаться, если оно действительно означает:
a = 5 + (7 % 2) // with a result of 6, или a = (5 + 7) % 2 // with a result of 0
Правильный ответ является первым из двух выражений с результатом 6. Существует установленный порядок с приоритетом каждого оператора, а не только арифметики из них (те, чьи предпочтение исходят от математики), но и для всех операторов, которые могут возникнуть в C++. От наиболее низкого приоритета, порядок будет следующим:
Уровень |
Оператор |
Описание |
Группировка |
1 |
:: |
scope | Слева направо |
2 |
() [] . -> ++ — dynamic_cast static_cast reinterpret_cast const_cast typeid |
Postfix | Слева направо |
3 |
++ — ~ ! sizeof new delete |
Унарный (префикс) | Справа налево |
* & |
косвенного обращения и ссылки (указатели) | ||
+ – |
унарный оператор знак | ||
4 |
(type) |
приведение типов | Справа налево |
5 |
.* ->* |
указатель на член | Слева направо |
6 |
* / % |
Мультипликативная | Слева направо |
7 |
+ – |
добавка | Слева направо |
8 |
<< >> |
сдвиг | Слева направо |
9 |
< > <= >= |
реляционные | Слева направо |
10 |
== != |
равенство | Слева направо |
11 |
& |
побитового И | Слева направо |
12 |
^ |
Побитовое исключающее или | Слева направо |
13 |
| |
побитовое OR | Слева направо |
14 |
&& |
Логическое И | Слева направо |
15 |
|| |
Логическое или | Слева направо |
16 |
?: |
Условное | Справа налево |
17 |
= *= /= %= += -= >>= <<= &= ^= |= |
назначение | Справа налево |
18 |
, |
запятая | Слева направо |
Группировка определяет порядок приоритета, в котором операторы вычисляются в дело, что есть несколько операторов одного уровня в выражении.
Это может быть интересно
- Самый простой диммер для светодиодного освещенияViews: 2975 Светодиоды все больше входят в нашу жизнь как источники освещения и как само собой разумеющееся, это вопрос регулировки яркости. Существует множество схемных решений, но в нашем варианте мы …
- Стробоскоп для автомобиляViews: 2148 Одним из популярных решений светового тюнинга автомобиля, мотоцикла или скутера стал эффект – “полицейский стробоскоп“. На база платы ch-c0050 реализовано несколько проектов. В этой статье приводятся две версии …
- DIXELL XWEB500D-EVO + RUT900 или как пробить NAT-серверViews: 992 Когда необходимо под какой нибудь контроллер имеющий вэб сервер в инет, то нужен статический IP, что оказалось проблемой при работе с операторами сотовых сетей, конкретно с оператором сети …
- Простой цифровой регулятор мощностиViews: 6416 Простой регулятор мощности с цифровой индикацией. Этот проект создан как обучающий, для ознакомления с основами построения сетевых регуляторов мощности. Устройства подобного типа можно использовать для управления освещением, скоростью …
- Audio-bluetooth modules F-6188 (BK8000L)Views: 2266Следующий модуль на чипе BK8000L. Заводское обозначение F-6188 также основным производителем не выпускается и отдан на тиражирование. с нижней стороны имеет маркировку В этом варианте мне попалась вроде полноценная …
- I2C MODULE – PIC18F25K42 Device ID Revision = A001Views: 1061 I2C MODULE Обход ошибок в версии I2C MODULE – PIC18F25K42 Device ID Revision = A001 В Серии K42 применен совершенно новый модуль шины I2C, который позволяет поддерживать все …
- Простой цифровой милливольтметр постоянного токаViews: 4038 Простой цифровой вольтметр постоянного тока. Три диапазона измерений с автоматическим переключением 1 – 0,001 – 0,999 V, 2 – 0,01-9,99 V, 3 – 0,1-99,9. Четыре управляемых выхода с возможностью задания функции контроля …
- Сумеречное релеViews: 1430 Реле управления освещением, датчик день-ночь – одним словом фотореле для управления освещением или формирования сигнала для системы умный дом о понижении или повышении освещенности относительно заданного уровня. Реле выполнено по классической схеме, конденсаторный блок питания, от сети переменного тока …
- Altium Designer – создание рисунков на печатной платеViews: 3242 Для создание рисунков на печатной платы в Altium Designer можно использовать возможность использовать в Altium Designer сторонних скриптов. Мне возможность эта очень понравилась и я решил её расшарить …
- Часы-кухонный таймерViews: 3929 Каждая кухня должна иметь кухонный таймер, который позволяет напоминать хозяйке когда проходить определенный промежуток времени. Например, печем пирог, варим яйца… , чтобы не смотреть постоянно на часы, установим таймер и …