Объекты 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 int1

float

float

Массив T

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

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

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

1Если тип 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 long1

long

int

long

unsigned

int или unsigned

unsigned

int

int

int

1Введите 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'.