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

Views: 385


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

,

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

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


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


  • Мультимедийная сеть – AVC-LAN TOYOTAМультимедийная сеть – AVC-LAN TOYOTA
    Views: 5679 AVC LAN – протокол обмена данными мультимедийных систем автомобиля. Кодирование данных. При кодировании различаться три типа данных : преамбула – её назначение, это сообщение устройствам на шине, что начинается передача данных. …
  • Просто о внешних переменныхПросто о внешних переменных
    Views: 767  Часто возникает задача когда необходимо предавать данные между модулями программы. Например, передать данные между файлами, или управлять работой модулей. Для этого создаем заголовочный файл и описываем наши переменные как …
  • MPLAB® Code ConfiguratorMPLAB® Code Configurator
    Views: 1768 MPLAB ® Code конфигуратор (MCC) является свободно распространяемым плагином, это графическая среда программирования, которая генерирует бесшовный, легкий для понимания кода на Cи, чтобы вставить его в свой проект.
  • Development board based on MCU PIC18F47Q84Development board based on MCU PIC18F47Q84
    Views: 810 PIC18F47Q84 Microcontroller Family with CAN Flexible Data Status: In Production.
  • HVLD модуль на примере PIC24FJ128GA204HVLD модуль на примере PIC24FJ128GA204
    Views: 619 HVLD модуль представляет собой простое устройство, для контроля напряжения питания микроконтроллера или внешнего напряжения (через делитель). Его задача при “выходе” напряжения за заданные пределы сформировать сообщение микроконтроллеру, что …
  • Analog-to-Digital Converter with Computation Technical BriefAnalog-to-Digital Converter with Computation Technical Brief
    Views: 1243 Аналого-цифровой преобразователь с вычислительным модулем. ВВЕДЕНИЕ Аналого-цифровой преобразователь (ADC) с вычислительным модулем (ADC2) в 8-разрядном микроконтроллере Microchip имеет встроенные вычислительные функции, которые обеспечивают функции пост-обработки, такие как передискретизация, …
  • Audio-bluetooth modules F-6188 (BK8000L)Audio-bluetooth modules F-6188 (BK8000L)
    Views: 2267Следующий модуль на чипе BK8000L. Заводское обозначение F-6188 также основным производителем не выпускается и отдан на тиражирование. с нижней стороны имеет маркировку В этом варианте мне попалась вроде полноценная …
  • DS18B20 – удаленный контроль температурыDS18B20 – удаленный контроль температуры
    Views: 3023 Контроль температуры с использованием датчиков температуры DS18B20 и платы ILLISSI-4B-09-primum Проект позволяет подключать к плате ILLISSI-4B-09-primum до 16 датчиков температуры DS18B20, удаленных более 300 метров,  и выводить информацию …
  • Обновление ESP8266 c ESPFlashDownloadTool_v3.6.3Обновление ESP8266 c ESPFlashDownloadTool_v3.6.3
    Views: 3449 Технология обновления следующая: Загружаем программу со страницы espressif.com. Разархивируем. Где находятся файлы, для прошивки? Заходим в каталоги Подключаем по схеме в статье WiFi ESP8266 (замыкаем BT2, перемычка). Запускаем программу, …
  • Audio-bluetooth modules BK8000L (noname)Audio-bluetooth modules BK8000L (noname)
    Views: 647 Еще один вариант, так сказать недоразумения Audio-bluetooth modules BK8000L (noname). Его отличительной маркировкой служат два отверстия в плате и надпись R2. Отличают его от модулей на чипе BK8000L, …




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