Объекты fi и Целочисленные типы данных C

Примечание

Разделы в этой теме сравнивают объект fi с типами данных с фиксированной точкой и операциями в C. В этих разделах информация о ANSI® C адаптируется от Сэмюэля П. Харбисона и Гая Л. Стила младшего, C: Справочник, 3-й редактор, Prentice Hall, 1991.

Целочисленные типы данных

Этот раздел сравнивает числовую область значений целочисленных типов данных fi к минимальной числовой области значений целочисленных типов данных C, принимая Дополнительное представление Туо.

C целочисленные типы данных

Много компиляторов C поддерживают дополнительное представление two типов данных целого числа со знаком. Следующая таблица показывает минимальные области значений целочисленных типов данных C с помощью дополнительного представления two. Целочисленные области значений могут быть больше, чем или равняться показанным областям значений, но не могут быть меньшими. Область значений long должна быть больше, чем или равной области значений int, который должен быть больше, чем или равным области значений short.

В дополнительном представлении two целое число со знаком с битами n имеет область значений от 2n1 к 2n11, включительно. Беззнаковое целое с n битами имеет диапазон от 0 до 2n1, включительно. Отрицательная сторона области значений имеет еще одно значение, чем положительная сторона, и нуль представлен исключительно.

Целочисленный типМинимумМаксимум

signed char

–128

127

unsigned char

0

255

short int

–32,768

32,767

unsigned short

0

65,535

int

–32,768

32,767

unsigned int

0

65,535

long int

–2,147,483,648

2,147,483,647

unsigned long

0

4,294,967,295

Целочисленные типы данных fi

В следующей таблице перечислены числовые области значений целочисленных типов данных объекта fi, в частности эквивалентные целочисленным типам данных C. Области значений являются достаточно большими, чтобы разместить дополнительное представление two, которое является единственным бинарным методом кодирования со знаком, поддержанным программным обеспечением Fixed-Point Designer™.

КонструкторСо знакомРазмер словаДробная длинаМинимумМаксимумСамый близкий ANSI C эквивалентный

fi(x,1,n,0)

Да

n
(2 - 65 535)

0

2n1

2n11

Не применяется

fi(x,0,n,0)

Нет

n
(2 - 65 535)

0

0

2n1

Не применяется

fi(x,1,8,0)

Да

8

0

–128

127

signed char

fi(x,0,8,0)

Нет

8

0

0

255

unsigned char

fi(x,1,16,0)

Да

16

0

–32,768

32,767

short int

fi(x,0,16,0)

Нет

16

0

0

65,535

unsigned short

fi(x,1,32,0)

Да

32

0

–2,147,483,648

2,147,483,647

long int

fi(x,0,32,0)

Нет

32

0

0

4,294,967,295

unsigned long

Унарные преобразования

Унарные преобразования диктуют, ли и как один операнд преобразован, прежде чем операция выполняется. В этом разделе рассматриваются унарные преобразования в ANSI C и объектов fi.

ANSI C обычные унарные преобразования

Унарные преобразования в ANSI C автоматически применяются к операндам унарного !, – ~, и операторы *, и бинарного << и операторов >>, согласно следующей таблице:

Исходный тип операндаANSI C преобразование

char или short

int

unsigned char или unsigned short

int или unsigned int 1

float

float

Массив T

Указатель на T

Функция, возвращающаяся T

Указатель на функцию, возвращающуюся T

1If вводят int, не может представлять все значения исходного типа данных без переполнения, конвертированным типом является unsigned int.

fi Обычные Унарные Преобразования

Следующая таблица показывает fi унарные преобразования:

C операторЭквивалентный fiПреобразование fi

!x

~x = not(x)

Результатом является logical.

~x

bitcmp(x)

Результатом является тот же числовой тип как операнд.

*x

Никакой эквивалент

Не применяется

x<<n

сдвиг разряда (x, n)
положительный n

Результатом является тот же числовой тип как операнд. Круглым режимом всегда является floor. Режиму переполнения повинуются. 0-значные биты переключаются на нижний регистр справа.

x>>n

bitshift(x,-n)

Результатом является тот же числовой тип как операнд. Круглым режимом всегда является floor. Режиму переполнения повинуются. 0-значные биты переключаются на нижний регистр слева, если операнд без знака или со знаком и положителен. 1-значные биты переключаются на нижний регистр слева, если операнд подписывается и отрицателен.

+x

+x

Результатом является тот же числовой тип как операнд.

-x

-x

Результатом является тот же числовой тип как операнд. Режиму переполнения повинуются. Например, переполнение может произойти, когда вы инвертируете fi без знака или наиболее отрицательную величину fi со знаком.

Бинарные преобразования

В этом разделе описываются преобразования, которые происходят, когда операнды бинарного оператора являются различными типами данных.

ANSI C обычные бинарные преобразования

В ANSI C, операнды бинарного оператора должны иметь тот же тип. Если они отличаются, каждый преобразован в тип другого согласно первому применимому преобразованию в следующей таблице:

Тип одного операндаТип другого операндаANSI C преобразование

long double

Любой

long double

double

Любой

double

float

Любой

float

unsigned long

Любой

unsigned long

long

unsigned

long или unsigned long 1

long

int

long

unsigned

int или unsigned

unsigned

int

int

int

1Type long только используется, если он может представлять все значения типа unsigned.

fi Обычные Бинарные Преобразования

Когда один из операндов бинарного оператора (+, – *, .*) является объектом fi, и другой MATLAB® встроенный числовой тип, затем non-fi операнд преобразован в объект fi, прежде чем операция будет выполнена, согласно следующей таблице:

Тип одного операндаТип другого операндаСвойства Другого Операнда После Преобразования в Объект fi

fi

double or single

  • Signed = то же самое как исходный операнд fi

  • WordLength = то же самое как исходный операнд fi

  • FractionLength = набор к лучшей возможной точности

fi

int8

  • Signed = 1

  • WordLength = 8

  • FractionLength = 0

fi

uint8

  • Signed = 0

  • WordLength = 8

  • FractionLength = 0

fi

int16

  • Signed = 1

  • WordLength = 16

  • FractionLength = 0

fi

uint16

  • Signed = 0

  • WordLength = 16

  • FractionLength = 0

fi

int32

  • Signed = 1

  • WordLength = 32

  • FractionLength = 0

fi

uint32

  • Signed = 0

  • WordLength = 32

  • FractionLength = 0

fi

int64

  • Signed = 1

  • WordLength = 64

  • FractionLength = 0

fi

uint64

  • Signed = 0

  • WordLength = 64

  • FractionLength = 0

Обработка переполнения

Следующие разделы выдерживают сравнение, как указатель программного обеспечения ANSI C и Fixed-Point Designer переполняется.

ANSI C обработка переполнения

В ANSI C, результатом операций целого числа со знаком является любое значение, производится машинной командой, используемой, чтобы реализовать операцию. Поэтому ANSI C не имеет никаких правил для обработки переполнения целого числа со знаком.

Результаты переполнения беззнаковых целых чисел переносятся в ANSI C.

Обработка Переполнения fi

Сложение и умножение с fi возражают результатам урожая, которые могут быть точно представлены объектом fi до размеров слова 65 535 битов или доступной памяти на вашей машине. Это не верно для деления, однако, потому что много отношений приводят к бесконечным двоичным выражениям. Можно выполнить деление с объектами fi с помощью функции divide, которая требует, чтобы вы явным образом задали числовой тип результата.

Условия, при которых объект fi переполняется и результаты, затем приведенные, определяются связанным объектом fimath. Можно задать определенные характеристики переполнения отдельно за суммы (включая различия) и продукты. Обратитесь к следующей таблице:

Свойства объектов fimath, Связанные, чтобы Переполнить ОбработкиЗначение свойстваОписание

OverflowAction

'saturate'

Переполнение насыщается к максимальному или минимальному значению в области значений.

'wrap'

Переполнение переносит использование арифметика по модулю, если без знака, дополнительный перенос two, если подписано.

ProductMode

'FullPrecision'

Результаты полной точности сохранены. Переполнение не происходит. Ошибка выдана, если получившийся размер слова больше, чем MaxProductWordLength.

Правила для вычисления получившегося слова продукта и дробных длин даны в fimath Свойствах объектов в Описании свойства.

 

'KeepLSB'

Младшие значащие биты продукта сохранены. Полная точность сохранена, но переполнение возможно. Это поведение моделирует целочисленные операции языка C.

Свойство ProductWordLength определяет получившийся размер слова. Если ProductWordLength больше, чем необходимо для продукта полной точности, то результат хранится в наименее значимых битах. Если ProductWordLength является меньше, чем необходимо для продукта полной точности, то переполнитесь, происходит.

Правило для вычисления получившейся длины части продукта дано в fimath Свойствах объектов в Описании свойства.

 

'KeepMSB'

Старшие значащие биты продукта сохранены. Переполнение предотвращено, но точность может быть потеряна.

Свойство ProductWordLength определяет получившийся размер слова. Если ProductWordLength больше, чем необходимо для продукта полной точности, то результат хранится в старших значащих битах. Если ProductWordLength является меньше, чем необходимо для продукта полной точности, то округление происходит.

Правило для вычисления получившейся длины части продукта дано в fimath Свойствах объектов в Описании свойства.

 

'SpecifyPrecision'

Можно задать и размер слова и дробную длину получившегося продукта.

ProductWordLength

Положительное целое число

Размер слова продукта заканчивается, когда ProductMode является 'KeepLSB', 'KeepMSB' или 'SpecifyPrecision'.

MaxProductWordLength

Положительное целое число

Максимальный размер слова продукта позволил, когда ProductMode является 'FullPrecision'. Значение по умолчанию составляет 65 535 битов. Это свойство может помочь гарантировать, что ваша симуляция не превышает ваши требования к аппаратным средствам.

ProductFractionLength

Целое число

Дробная длина продукта заканчивается, когда ProductMode является 'Specify Precision'.

SumMode

'FullPrecision'

Результаты полной точности сохранены. Переполнение не происходит. Ошибка выдана, если получившийся размер слова больше, чем MaxSumWordLength.

Правила для вычисления получившегося слова суммы и дробных длин даны в fimath Свойствах объектов в Описании свойства.

 

'KeepLSB'

Младшие значащие биты суммы сохранены. Полная точность сохранена, но переполнение возможно. Это поведение моделирует целочисленные операции языка C.

Свойство SumWordLength определяет получившийся размер слова. Если SumWordLength больше, чем необходимо за сумму полной точности, то результат хранится в наименее значимых битах. Если SumWordLength является меньше, чем необходимо за сумму полной точности, то переполнитесь, происходит.

Правило для вычисления получившейся длины части суммы дано в fimath Свойствах объектов в Описании свойства.

 

'KeepMSB'

Старшие значащие биты суммы сохранены. Переполнение предотвращено, но точность может быть потеряна.

Свойство SumWordLength определяет получившийся размер слова. Если SumWordLength больше, чем необходимо за сумму полной точности, то результат хранится в старших значащих битах. Если SumWordLength является меньше, чем необходимо за сумму полной точности, то округление происходит.

Правило для вычисления получившейся длины части суммы дано в fimath Свойствах объектов в Описании свойства.

 

'SpecifyPrecision'

Можно задать и размер слова и дробную длину получившейся суммы.

SumWordLength

Положительное целое число

Размер слова суммы заканчивается, когда SumMode является 'KeepLSB', 'KeepMSB' или 'SpecifyPrecision'.

MaxSumWordLength

Положительное целое число

Максимальный размер слова суммы позволил, когда SumMode является 'FullPrecision'. Значение по умолчанию составляет 65 535 битов. Это свойство может помочь гарантировать, что ваша симуляция не превышает ваши требования к аппаратным средствам.

SumFractionLength

Целое число

Дробная длина суммы заканчивается, когда SumMode является 'SpecifyPrecision'.