Visual studio тип byte

Обновлено: 07.07.2024

Этот урок посвящен числовым типам и типу Boolean. Рассмотрены вопросы приведения типов, арифметические и логические операции, возможности класса Math и преобразование чисел в строку и обратно.

Исходный код примеров из этой статьи можете скачать из нашего github-репозитория.

Числовые типы

Приведение типов

При работе с числовыми типами данных довольно часто приходится сталкиваться с “расширением” и с “сужением” типа. Для начала рассмотрим несколько примеров:

При компиляции этого кода никаких ошибок не будет несмотря на то, что мы присваиваем переменную одного типа ( byte ) переменной другого типа ( short ) для целых чисел это делать можно без последствий, так как в данном случае происходит расширение типа. Переменная типа byte может принимать значения из диапазона от -128 до 127, а short из диапазона от -32 768 до 32 767, что значительно превышает ограничения для byte . Таким образом, при присваивании значения переменной типа byte , переменной типа short не происходит потери данных. В обратную сторону это сделать не получится, если вы напишите код, приведенный ниже, то компиляция будет прервана с ошибкой:

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

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

В результате на консоль будет выведено следующее:

Проверка переполнения

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

Если необходимо провести проверку для группы операторов, то используйте checked следующим образом:

Overflow is detected!

Для того, чтобы выполнять такого типа проверку для всех вычислений в вашем приложении необходимо активировать эту опцию на этапе компиляции. Если вы работаете в Visual Studio , то зайдите в свойства проекта, перейти на вкладку Build и нажмите на кнопку “ Advanced… ”. В результате откроется окно с настройками:

В нем можно поставить (или убрать) галочку в поле “ Check for arithmetic overflow/underflow ”. Если установить галочку, то все вычисления будут проверяться на переполнение. В таком случае можно отдельно создавать блоки кода, в которых данная проверка производиться не будет, для этого используйте оператор unchecked :

Класс System.Convert

Для приведения типов можно воспользоваться классом System . Convert , который содержит методы для приведения одного типа к другому. Подробная документация по его возможностям приведена в официальной документации .

Приведем несколько примеров его использования. Вариант, когда приведение типа не приводит к переполнению:

Вариант, когда приведение типа приводит к переполнению, в этом случае будет выброшено исключение:

Арифметические операции

Из перечисленных выше арифметических операций, обратите внимание на операции инкремента и декремента. При использовании постфиксного варианта, вначале происходит возврат значения переменной, а потом выполнение операции, для префиксного наоборот.

Класс Math

Класс Math предоставляет реализации распространенных математических функций. Полный список представлен в официальной документации . Ниже будут рассмотрены некоторые из функций класса Math .

Функции округления

Math.Ceiling

Возвращает наименьшее число, которое больше либо равно заданному:

Возвращает наибольшее число, которое меньше либо равно заданному:

Округляет число до ближайшего целого значения. Значение посередине округляется до ближайшего четного.

Тригонометрические функции

Разное

Возвращает число e в заданной степени:

Если функция вызывается с одним аргументом, то возвращается натуральный логарифм числа:

Если с двумя аргументами, то возвращается логарифм числа по заданному основанию:

Возвращает десятичный логарифм числа:

Возвращает логарифм по основанию 2 от числа:

Возвращает число, возведенное в заданную степень:

Возвращает абсолютное значение числа:

Возвращает наименьшее из переданных чисел:

Возвращает наибольшее из переданных чисел:

Возвращает знак числа. Если число положительное, то будет возвращено значение 1, если отрицательное, то -1.

Преобразование числа в строку

Для форматирования строкового представления числа с плавающей точкой используйте Format с соответствующим набором маркеров, пример:

Преобразование строки в число

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

Класс Convert

Класс Convert предоставляет набор статических методов для преобразования в базовые типы данных и обратно. Поддерживается следующий набор типов: SByte , Byte , Int16 , Int32 , Int64 , UInt16 , UInt32 , UInt64 , Single , Double , Decimal , Boolean , Char , DateTime , String .

Приведем несколько примеров:

При работе с Convert может происходить:

  • Успешное преобразование.
  • Выброс исключения InvalidCastException , если запрашиваемое преобразование не может быть выполнено. Это может происходить при попытке преобразовать типы Boolean, Double, Decimal, Single, DateTime в Char и обратно, DateTime в не строковый тип и обратно.
  • Выброс исключения FormatException , если преобразование завершается с ошибкой.
  • Выброс исключения OverflowException , если происходит потеря данных при сужении типа (см. Приведение типов).

Класс Convert позволяет работать с разными системами счисления. Поддерживаются двоичное (2), восьмеричное (8), десятичное (10) и шестнадцатеричное (16) основание:

Методы числовых типов

Другим способом преобразования строки в число является использование методов Parse и TryParse , которые предоставляют числовые типы данных. Метод TryParse пытает преобразовать переданную в него строку в число, если это возможно, то полученное значение присваивается второму аргументу с ключевым словом out и возвращает значение true , в ином случае возвращает значение false .

В первом случае преобразование строки “123” в число будет выполнено успешно, во втором нет.

Преобразовать строку в число можно также с помощью метода Parse , если процесс пройдет успешно, то будет возвращено численное значение соответствующего типа, если нет, то будет выброшено исключение ArgumentNullException , ArgumentException , FormatException или OverflowException .

Тип данных Boolean

Экземпляр типа данных Boolean можно создать через объявление либо получить в результате логической операции.

Логические операторы

Название Обозначение Пример
Логическое отрицание ! !a
Логическое И & a & b
Логическое исключающее ИЛИ ^ a ^ b
Логическое ИЛИ | a | b
Условный оператор логического И && a && b
Условный оператор логического ИЛИ || a || b

Операторы &, ^, | всегда обрабатывают оба операнда в выражении, операторы && и || вычисляют правый только в случае, если это необходимо.

Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.

Комментарии

Создание экземпляра байтового значения

Создать экземпляр Byte значения можно несколькими способами.

Можно объявить Byte переменную и присвоить ей литеральное целочисленное значение, которое находится в диапазоне Byte типа данных. В следующем примере объявляются две переменные Byte и им присваиваются значения описанным способом.

Можно вызвать метод Convert класса, чтобы преобразовать любой поддерживаемый тип в Byte значение. Это возможно, так как Byte реализует интерфейс IConvertible. В следующем примере показано преобразование массива значений Int32 в значения типа Byte.

Можно вызвать Parse метод или, TryParse чтобы преобразовать строковое представление Byte значения в Byte . Строка может содержать либо десятичные, либо шестнадцатеричные цифры. В следующем примере показан вызов метода Parse с использованием десятичной и шестнадцатеричной строк.

Выполнение операций с байтными значениями

ByteТип поддерживает стандартные математические операции, такие как сложение, вычитание, деление, умножение, вычитание, отрицание и унарное отрицание. Как и другие целочисленные типы, тип Byte также поддерживает битовые операторы AND , OR , XOR и операторы правого и левого сдвига.

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

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

Представление байта в виде строки

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

Чтобы отформатировать Byte значение как целую строку без ведущих нулей, можно вызвать метод без параметров ToString() . С помощью описателя формата "D" можно также включить указанное число начальных нулей в строковом представлении. С помощью описателя формата "X" можно представить Byte значение в виде шестнадцатеричной строки. В следующем примере элементы массива Byte значений форматируются в следующих трех способах.

Можно также отформатировать Byte значение как двоичную, восьмеричную, десятичную или шестнадцатеричную строку, вызвав ToString(Byte, Int32) метод и указав основание в качестве второго параметра метода. В следующем примере этот метод вызывается для отображения двоичного, восьмеричного и шестнадцатеричного представления массива байтовых значений.

Работа с недесятичными байтами

Помимо работы с отдельными байтами в качестве десятичных значений, может потребоваться выполнить побитовые операции с байтовыми значениями или работать с массивами байтов либо с двоичными или шестнадцатеричными представлениями байтовых значений. Например, перегрузки BitConverter.GetBytes метода могут преобразовать каждый из примитивных типов данных в массив байтов, а BigInteger.ToByteArray метод преобразует BigInteger значение в массив байтов.

Byte значения представлены в виде 8 бит только по их величине, без бита знака. Это важно помнить при выполнении побитовых операции со значениями Byte или при работе с отдельными их битами. Для выполнения числовых, логических операций или операции сравнения с двумя недесятичными значениями, оба значения должны использовать одно и то же представление.

Если операция выполняется над двумя Byte значениями, значения имеют одинаковое представление, поэтому результат будет точным. Это показано в следующем примере, который маскирует бит наименьшего порядка Byte значения, чтобы убедиться, что он является четным.

Представляет наибольшее возможное значение типа Byte. Это поле является константой.

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

Методы

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

Возвращает значение, позволяющее определить, представляют ли этот экземпляр и заданный объект Byte одно и то же значение.

Возвращает значение, показывающее, равен ли данный экземпляр заданному объекту.

Возвращает хэш-код данного экземпляра.

Возвращает TypeCode для типа значения Byte.

Преобразует представление числа в виде диапазона в указанном стиле и формате, связанном с определенным языком и региональными параметрами, в его эквивалент типа Byte.

Преобразует строковое представление числа в его эквивалент типа Byte.

Преобразует строковое представление числа в указанном формате, связанном с определенным языком и региональными параметрами, в его эквивалент типа Byte.

Преобразует строковое представление числа с указанным стилем в его эквивалент в формате Byte.

Преобразует строковое представление числа в указанном стиле и формате, связанном с определенным языком и региональными параметрами, в его эквивалент типа Byte.

Преобразует значение текущего объекта Byte в эквивалентное ему строковое представление.

Преобразует числовое значение текущего объекта Byte в эквивалентное ему строковое представление с использованием указанных сведений об особенностях форматирования для данного языка и региональных параметров.

Преобразует значение текущего объекта Byte в эквивалентное ему строковое представление с использованием заданного формата.

Преобразует числовое значение текущего объекта Byte в эквивалентное ему строковое представление с использованием указанного формата и сведений об особенностях форматирования для данного языка и региональных параметров.

Пытается преобразовать представление числа в виде диапазона в его эквивалент типа Byte и возвращает значение, которое указывает на то, успешно ли выполнено преобразование.

Преобразует представление числа в виде диапазона в указанном стиле и формате, связанном с определенным языком и региональными параметрами, в его эквивалент типа Byte. Возвращает значение, указывающее, успешно ли выполнено преобразование.

Предпринимает попытку преобразования строкового представления числа в его эквивалент типа Byte и возвращает значение, позволяющее определить, успешно ли выполнено преобразование.

Преобразует строковое представление числа в указанном стиле и формате, связанном с определенным языком и региональными параметрами, в его эквивалент типа Byte. Возвращает значение, указывающее, успешно ли выполнено преобразование.

Явные реализации интерфейса

Сравнивает текущий экземпляр с другим объектом того же типа и возвращает целое число, которое показывает, расположен ли текущий экземпляр перед, после или на той же позиции в порядке сортировки, что и другой объект.

Возвращает TypeCode для этого экземпляра.

Описание этого члена см. в разделе ToBoolean(IFormatProvider).

Описание этого члена см. в разделе ToByte(IFormatProvider).

Описание этого члена см. в разделе ToChar(IFormatProvider).

Это преобразование не поддерживается. При попытке использовать этот метод выбрасывается исключение InvalidCastException.

Описание этого члена см. в разделе ToDecimal(IFormatProvider).

Описание этого члена см. в разделе ToDouble(IFormatProvider).

Описание этого члена см. в разделе ToInt16(IFormatProvider).

Описание этого члена см. в разделе ToInt32(IFormatProvider).

Описание этого члена см. в разделе ToInt64(IFormatProvider).

Описание этого члена см. в разделе ToSByte(IFormatProvider).

Описание этого члена см. в разделе ToSingle(IFormatProvider).

Описание этого члена см. в разделе ToType(Type, IFormatProvider).

Описание этого члена см. в разделе ToUInt16(IFormatProvider).

Описание этого члена см. в разделе ToUInt32(IFormatProvider).

Описание этого члена см. в разделе ToUInt64(IFormatProvider).

Применяется к

Потокобезопасность

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

Эти типы сохраняются в разных местах памяти: типы значений сохраняются в области, известной как стек, а ссылочные типы — в области, называемой управляемой кучей.

Классификация типов данных

Давайте разберем типы значений.

Целочисленные типы

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

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

Так, если значение нужно сохранить без знака, то для него можно выбрать тип uint, для больших значений со знаком — тип long, а для больших значений без знака — тип ulong. В качестве примера ниже приведена программа, вычисляющая расстояние от Земли до Солнца в сантиметрах. Для хранения столь большого значения в ней используется переменная типа long:

Всем целочисленным переменным значения могут присваиваться в десятичной или шестнадцатеричной системе обозначений. В последнем случае требуется префикс 0x:

Если возникает какая-то неопределенность относительно того, имеет ли целое значение тип int, uint, long или ulong, то по умолчанию принимается int. Чтобы явно специфицировать, какой другой целочисленный тип должно иметь значение, к числу можно добавлять следующие символы:

U и L можно также указывать в нижнем регистре, хотя строчную L легко зрительно спутать с цифрой 1 (единица).

Типы с плавающей точкой

Тип данных float предназначен для меньших значений с плавающей точкой, для которых требуется меньшая точность. Тип данных double больше, чем float, и предлагает более высокую степень точности (15 разрядов).

Если нецелочисленное значение жестко кодируется в исходном тексте (например, 12.3), то обычно компилятор предполагает, что подразумевается значение типа double. Если значение необходимо специфицировать как float, потребуется добавить к нему символ F (или f):

Десятичный тип данных

Для представления чисел с плавающей точкой высокой точности предусмотрен также десятичный тип decimal, который предназначен для применения в финансовых расчетах. Этот тип имеет разрядность 128 бит для представления числовых значений в пределах от 1Е-28 до 7,9Е+28. Вам, вероятно, известно, что для обычных арифметических вычислений с плавающей точкой характерны ошибки округления десятичных значений. Эти ошибки исключаются при использовании типа decimal, который позволяет представить числа с точностью до 28 (а иногда и 29) десятичных разрядов. Благодаря тому что этот тип данных способен представлять десятичные значения без ошибок округления, он особенно удобен для расчетов, связанных с финансами:

Результатом работы данной программы будет:

Использование типа decimal

Символы

Для того чтобы присвоить значение символьной переменной, достаточно заключить это значение (т.е. символ) в одинарные кавычки:

Наравне с представлением char как символьных литералов, их можно представлять как 4-разрядные шестнадцатеричные значения Unicode (например, '\u0041'), целочисленные значения с приведением (например, (char) 65) или же шестнадцатеричные значения (например, '\x0041'). Кроме того, они могут быть представлены в виде управляющих последовательностей.

Логический тип данных

Какими бы сложными объектами, массива или коллекциями мы не пользовались, следует помнить, что основой их являются единичные переменные.

Это основные кирпичики информации, атомы из которых будет формироваться в последствии сложная структура огромных объектов. В конце концов, вся информация в компьютерных системах представляется в численном виде, поэтому теоретически мы могли бы обойтись и один единственным типом данных.

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

  • Boolean - логический тип. Для хранения переменной отводятся 2 байта. Переменная может принимать только 2 значения True(Истина) и False(Ложь).
  • Byte - числовой тип. Для хранения переменной отводиться 1 байт. Значения переменной может находиться в промежутке от 0 до 255. Знак не используется.
  • Char - символьный тип. Для хранения переменной отводиться 2 байта. В качестве значения переменной обычно применяются символы, так как используются теперь 2 байта. Разработчики могут применять символы Unicode.
  • Date - предназначен для хранения дат. Переменная занимает 8 байт. Возможные значения находятся в промежутке от 1 января 100 года нашей эры до 31 декабря 9999 года.
  • Decimal - самый мощный числовой тип. Для хранения переменной подобного типа отводиться 16 байт. Отрицательная и положительная границы промежутка, в котором располагаются возможные значения этой переменной, одинаковы по модулю и равны +/- 79 228 162 514 264 337 593 543 950 335, если использовать целые числа. Если же необходимо хранить дробные величины, то границы возможных значений будут смещены на несколько порядков в зависимости от того, сколько знаков после запятой использует разработчик. Подобный тип может использоваться только для хранения десятичных дробей. Разработчик может использовать до 28 знаков после запятой.
  • Double - это числовой тип. Применятся для хранения чисел в экспоненциальной форме. Для хранения переменной отводится 8 байт. Отрицательные значения находятся в промежутке от - 1,79769313486231E+308 до -4,94065645841247E-324. Положительные значения входят в промежуток от 4,94065645841247E-324 до 1,79769313486231E+308.
  • Integer - предназначен для обработки целочисленных значений. Переменная подобного типа занимает 4 байта. Возможные значения находятся в промежутке от - 2 147 483 648 до 2 147 483 647.
  • Long - предназначен для целочисленных значений. Для хранения переменной отводится байт. Возможные значения переменной подобного типа находятся в промежутке от - 9 223 372 036 854 775 808 до 9 223 372 036 854 775 807.
  • Object - по сути, переменная подобного типа является всего лишь ссылкой на некий конкретный экземпляр какого либо объекта. Для хранения переменной отводятся 4 байта.
  • Short - облегченный целочисленный тип. Для хранения переменной отводятся 2 байта. Возможные значения переменной данного типа находятся в промежутке от - 32 768 до 32 767.
  • Single - предназначен для хранения чисел в экспоненциальной форме. Для хранения переменной отводятся 4 байта. Отрицательные возможные значения переменной такого типа расположены в промежутке от - 3,402823E+38 до -1,401298E-45. Положительные значения укладываются в промежуток от 1,401298E-45 до 3,402823E+38.
  • String - строковый тип. Предназначен для хранения строк различной длинны. Возможная длинна строки, может, доходит до 2-х миллионов символов кодировки Unicode. Объем памяти для хранения переменной выделяется в зависимости от длинны строки.

Если есть типы данных, то существуют и переменные. А если мы используем переменные в своих приложениях, следует уметь их объявлять. Объявление переменных производиться при помощи комбинации ключевых слов Dim и As. Типичный пример объявления целочисленных переменных выглядит следующим образом:

  • CBool - возвращает булево значение. В качестве параметра функции может быть передано, какое либо условие или числовое значение.
  • CByte - возвращает значении е типа Byte. В качестве параметра передается соответствующая строка или числовое значение.
  • CChar - возвращает символ. В качестве параметра передается целое число, находящееся в промежутке от 0 до 65 535.
  • CDate - возвращает значение типа Date. В качестве параметра можно использовать любое принятое в операционной системе обозначение даты.
  • CDbl - преобразовывает значение параметра к типу Double.
  • CDec - применяется для преобразования параметра к типу Decimal.
  • CInt - преобразовывает значения параметра к целочисленному типу Integer. Если в качестве параметра передано дробное число, то дробная часть просто округляется.
  • CLng - возвращает значение типа Long. Обработка параметра производиться по образцу функции CInt.
  • CShort - преобразовывает переменную или значение к типу Short.
  • CSng - применяется для преобразования параметра к типу Single.
  • CStr - используется для преобразования данных в строковый тип String.

Если в качестве параметра функции передается булево значение, то возвращается строка True или False. Если передаются данные типа Date, то функцией возвращается строка содержащая обозначение даты в принятом для системы формате. Любое числовое значение преобразовывается в символьное представление данного числа.

Читайте также: