Оператор – sizeof() – Приоритет операторов

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-серверDIXELL XWEB500D-EVO + RUT900 или как пробить NAT-сервер
    Views: 992 Когда необходимо под какой нибудь контроллер имеющий вэб сервер в инет, то нужен статический IP, что оказалось проблемой при работе с операторами сотовых сетей, конкретно с оператором сети …
  • Простой цифровой регулятор мощностиПростой цифровой регулятор мощности
    Views: 6416 Простой регулятор мощности с цифровой индикацией. Этот проект создан как обучающий, для ознакомления с основами построения сетевых регуляторов мощности. Устройства подобного типа можно использовать для управления освещением, скоростью …
  • Audio-bluetooth modules F-6188 (BK8000L)Audio-bluetooth modules F-6188 (BK8000L)
    Views: 2266Следующий модуль на чипе BK8000L. Заводское обозначение F-6188 также основным производителем не выпускается и отдан на тиражирование. с нижней стороны имеет маркировку В этом варианте мне попалась вроде полноценная …
  • I2C MODULE – PIC18F25K42 Device ID Revision = A001I2C MODULE – PIC18F25K42 Device ID Revision = A001
    Views: 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 – создание рисунков на печатной платеAltium Designer – создание рисунков на печатной плате
    Views: 3242   Для создание рисунков на печатной платы в Altium Designer можно использовать возможность использовать в Altium Designer сторонних скриптов. Мне возможность эта очень понравилась и я решил её расшарить …
  • Часы-кухонный таймерЧасы-кухонный таймер
    Views: 3929 Каждая кухня должна иметь кухонный таймер, который позволяет напоминать хозяйке когда проходить определенный промежуток времени. Например, печем пирог, варим яйца… , чтобы не смотреть постоянно на часы, установим таймер и …




Поделись этим!