Целые числа

Целочисленные классы

MATLAB® имеет четыре подписанных и четыре класса беззнаковых целых чисел. Типы со знаком позволяют вам работать с отрицательными целыми числами, а также положительный, но не могут представлять столь же широкую область значений чисел как типы без знака, потому что один бит используется, чтобы определять положительный или знак минус для номера. Типы без знака дают вам более широкую область значений чисел, но эти числа могут только быть нулем или положительный.

MATLAB поддерживает 1-, 2-, 4-, и 8-байтовое устройство хранения данных для целочисленных данных. Можно сохранить память и время выполнения для программ, если вы используете самый маленький целый тип, который размещает ваши данные. Например, вам не нужно 32-битное целое число, чтобы сохранить значение 100.

Вот восемь целочисленных классов, область значений значений, которые можно сохранить каждым типом и функцией преобразования MATLAB, требуемой создать тот тип:

Класс

Область значений значений

Функция преобразования

8-битное целое число со знаком

- 27 к 27-1

int8

16-битное целое число со знаком

- 215 к 215-1

int16

32-битное целое число со знаком

- 231 к 231-1

int32

64-битное целое число со знаком

- 263 к 263-1

int64

8-битное целое число без знака

0 к 28-1

uint8

16-битное целое число без знака

0 к 216-1

uint16

32-битное целое число без знака

0 к 232-1

uint32

64-битное целое число без знака

0 к 264-1

uint64

Создание целочисленных данных

MATLAB хранит числовые данные как плавающую точку двойной точности (double) по умолчанию. Чтобы хранить данные как целое число, необходимо преобразовать от double до желаемого целого типа. Используйте одну из функций преобразования, показанных в приведенной выше таблице.

Например, чтобы сохранить 325 как 16-битное целое число со знаком, присвоенное переменному x, ввести

x = int16(325);

Если номер, преобразовываемый в целое число, имеет дробную часть, раунды MATLAB к самому близкому целому числу. Если дробной частью является точно 0.5, то от двух одинаково соседних целых чисел, MATLAB выбирает то, для которого абсолютное значение больше в значении:

x = 325.499;
int16(x)
ans =
	
  int16

   325         

x = x + .001;
int16(x)
ans =

  int16

   326                                      

Если вам нужен к раунду номер с помощью округляющейся схемы кроме значения по умолчанию, MATLAB обеспечивает четыре округляющихся функции: round, fix, floor и ceil. Функция fix позволяет вам заменить значение по умолчанию и вокруг по направлению к нулю, когда существует ненулевая дробная часть:

x = 325.9;

int16(fix(x))
ans =

  int16

   325

Арифметические операции, которые включают оба целых числа и с плавающей точкой всегда, приводят к целочисленному типу данных. MATLAB округляет результат, при необходимости, согласно алгоритму округления значения по умолчанию. Пример ниже приводит к точному ответу 1426.75, который MATLAB затем округляет к следующему самому высокому целому числу:

int16(325) * 4.39
ans =

  int16

   1427

Целочисленные функции преобразования также полезны при преобразовании других классов, таких как строки, к целым числам:

str = 'Hello World';

int8(str)
ans =

  1×11 int8 row vector

    72   101   108   108   111    32    87   111   114   108   100

Если вы преобразовываете значение NaN в целочисленный класс, результатом является значение 0 в том целочисленном классе. Например,

int32(NaN)
ans =

  int32

   0

Арифметические операции на целочисленных классах

MATLAB может выполнить целочисленную арифметику на следующих типах данных:

  • Целые числа или целочисленные массивы того же целочисленного типа данных. Это приводит к результату, который имеет совпадающий тип данных как операнды:

    x = uint32([132 347 528]) .* uint32(75);
    class(x)
    ans =
       uint32
  • Целые числа или целочисленные массивы и скаляр с двойной точностью числа с плавающей запятой. Это приводит к результату, который имеет совпадающий тип данных как целочисленные операнды:

    x = uint32([132 347 528]) .* 75.49;
    class(x)
    ans =
       uint32

Для всех бинарных операций, в которых один операнд является массивом целочисленного типа данных (кроме 64-битных целых чисел) и другой, скаляр дважды, MATLAB вычисляет операцию, использующую поэлементный с двойной точностью арифметика, и затем преобразовывает результат назад в исходный целочисленный тип данных. Для бинарных операций, включающих 64-битный целочисленный массив и скаляр дважды, MATLAB вычисляет операцию, как будто 80-битная арифметика расширенной точности использовалась, чтобы предотвратить потерю точности.

Самые большие и наименьшие значения для целочисленных классов

Для каждого целочисленного типа данных существует самый большой и самый маленький номер, который можно представлять с тем типом. Таблица, показанная под Целыми числами, приводит самые большие и наименьшие значения для каждого целочисленного типа данных в “Области значений Значений” столбец.

Можно также получить эти значения с функциями intmin и intmax:

intmax('int8')               
ans =

  int8

   127

intmin('int8')   
ans =

  int8

   -128

Если вы преобразовываете номер, который больше, чем максимальное значение целочисленного типа данных к тому типу, MATLAB устанавливает его на максимальное значение. Точно так же, если вы преобразовываете номер, который меньше, чем минимальное значение целочисленного типа данных, MATLAB устанавливает его на минимальное значение. Например,

x = int8(300)
x =

  int8

   127
               
x = int8(-300)
x =

  int8

   -128

Кроме того, когда результат арифметической операции, включающие целые числа превышают максимум (или минимум) значение типа данных, MATLAB, устанавливает его на максимум (или минимум) значение:

x = int8(100) * 3
x =

  int8

   127

x = int8(-100) * 3
x =

  int8

   -128
Была ли эта тема полезной?