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

Views: 524


Оператор – 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

,

запятая Слева направо

Группировка определяет порядок приоритета, в котором операторы вычисляются в дело, что есть несколько операторов одного уровня в выражении.


Это может быть интересно


  • OLED RET012864E/REX012864JOLED RET012864E/REX012864J
    Views: 1598 RET012864E/REX012864J ОЛЕД индикатор производитель Raystar-Optronics приобретался в http://www.microchip.ua/ к сожалению никакой информации на сайте поставщика нет. Поэтому решил работу с этой версией индикатора на драйвере SSD1305 предоставить на своем сайте. Так как …
  • Регулятор влажностиРегулятор влажности
    Views: 1368 Регулятор ILLISSI-CH-1000 предназначен для контроля и регулировки относительной влажности в диапазоне от 0 до 100%. Регулятор позволяет работать как в режиме осушения, так и увлажнения. Для измерения возможно …
  • Цифровой спидометр для автомобиляЦифровой спидометр для автомобиля
    Views: 10311  Универсальность печатной платы ch-c0030pcb позволяет создавать на её основе разнообразные устройства. Одним из таких устройств является электронный спидометр для автомобиля, в котором можно задать два компаратора скорости, например,  для …
  • PIC18F25K42 – v. A001 – выявленные баги.PIC18F25K42 – v. A001 – выявленные баги.
    Views: 806 Модуль I2C Не работает при использовании в стандартной конфигурации MCC. Требует особой нестандартной конфигурации и управления для нормальной работы. Обойти Обход проблемы возможен библиотека см статью. Модуль ADC2 На …
  • CAN – Controller Area NetworkCAN – Controller Area Network
    Views: 1256 Controller Area Network (CAN) первоначально был создан немецким поставщиком автомобильных систем Робертом Бош в середины 1980-х для автомобильной промышленности как метод для обеспечения возможности надежной последовательной связи. Целью было сделать автомобили более надежными, …
  • Ссылки на интересные источникиСсылки на интересные источники
    Views: 984 Сбор 3D моделей от André L’Hérault конденсаторы, резисторы, индуктивности dropbox IPC-SM-782 Surface Mount Design and Land Pattern Standard Видео уроки по Altium designer Alexey Sabunin https://www.youtube.com/channel/UCG7N5CqXpyK8nQjr1EmMgng Сергей Булавинов https://www.youtube.com/channel/UCISAMXRnN_Qw9UTjUwZI1Jw Robert Feranec https://www.youtube.com/user/matarofe …
  • Проект с использованием MCC часть 12-2Проект с использованием MCC часть 12-2
    Views: 1201 Настало время для изучения шины I2C. Изучать будем на примере работы с индикатором RET012864E. Что изменили со старой схемы: В прошлой теме я затупил и не добавил подтягивающие резисторы …
  • ESP8266  процедура получение данных даты и времени от серверов точного времени.ESP8266 процедура получение данных даты и времени от серверов точного времени.
    Views: 6229 Эта функция доступна уже в версии 1.6.1. Для многих приложений, необходимо часы реального времени,  если в вашем проекте есть модуль WiFI ESP8266, то легко можно сделать следующим образом. …
  • Проблемы классической светомузыкиПроблемы классической светомузыки
    Views: 2189 Светомузыка – что это такое? Определение: Светомузыка  (жаргонное: цветомузыка)  — вид искусства, основанный на способности человека ассоциировать звуковые ощущения со световыми восприятиями. Такое явление в неврологии получило название …
  • I2C MODULE – PIC18F25K42 Device ID Revision = A001I2C MODULE – PIC18F25K42 Device ID Revision = A001
    Views: 1205 I2C MODULE Обход ошибок в версии I2C MODULE – PIC18F25K42 Device ID Revision = A001 В Серии K42 применен совершенно новый модуль шины I2C, который позволяет поддерживать все …




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