Разное

Basic c: Basic C, Operations, Types, Storage Classes

Содержание

Basic concepts — C# language specification



  • Чтение занимает 42 мин

В этой статье

Запуск приложенияApplication Startup

Сборка с точкой входа называется приложением.An assembly that has an entry point is called an application. При запуске приложения создается новый домен приложения .When an application is run, a new application domain is created. Несколько различных экземпляров приложения могут существовать на одном компьютере одновременно, каждый из которых имеет свой собственный домен приложения.Several different instantiations of an application may exist on the same machine at the same time, and each has its own application domain.

Домен приложения обеспечивает изоляцию приложений, выполняя роль контейнера для состояния приложения.An application domain enables application isolation by acting as a container for application state. Домен приложения выступает в качестве контейнера и границы для типов, определенных в приложении, и используемых им библиотек классов.An application domain acts as a container and boundary for the types defined in the application and the class libraries it uses. Типы, загруженные в один домен приложения, отличаются от типа, загруженного в другой домен приложения, и экземпляры объектов не являются прямыми совместно используемыми доменами приложений.Types loaded into one application domain are distinct from the same type loaded into another application domain, and instances of objects are not directly shared between application domains. Например, каждый домен приложения имеет собственную копию статических переменных для этих типов, а статический конструктор для типа выполняется не более одного раза для каждого домена приложения.For instance, each application domain has its own copy of static variables for these types, and a static constructor for a type is run at most once per application domain. Реализации могут обеспечивать политику или механизмы, относящиеся к реализации, для создания и уничтожения доменов приложений.Implementations are free to provide implementation-specific policy or mechanisms for the creation and destruction of application domains.

Запуск приложения происходит, когда среда выполнения вызывает назначенный метод, который называется точкой входа приложения.Application startup occurs when the execution environment calls a designated method, which is referred to as the application’s entry point. Этот метод точки входа всегда называется Mainи может иметь одну из следующих сигнатур:This entry point method is always named Main, and can have one of the following signatures:

static void Main() {...}

static void Main(string[] args) {...}

static int Main() {...}

static int Main(string[] args) {...}

Как видно, точка входа может дополнительно возвращать int значение.As shown, the entry point may optionally return an int value. Это возвращаемое значение используется при завершении работы приложения (Завершение приложения).This return value is used in application termination (Application termination).

Точка входа может дополнительно иметь один формальный параметр.The entry point may optionally have one formal parameter. Параметр может иметь любое имя, но тип параметра должен быть string[].The parameter may have any name, but the type of the parameter must be string[]. Если указан формальный параметр, среда выполнения создает и передает string[] аргумент, содержащий аргументы командной строки, которые были указаны при запуске приложения.If the formal parameter is present, the execution environment creates and passes a string[] argument containing the command-line arguments that were specified when the application was started. Аргумент string[] никогда не равен null, но может иметь нулевую длину, если не были указаны аргументы командной строки.The string[] argument is never null, but it may have a length of zero if no command-line arguments were specified.

Поскольку C# поддерживает перегрузку методов, класс или структура может содержать несколько определений какого-либо метода, если каждый из них имеет свою сигнатуру.Since C# supports method overloading, a class or struct may contain multiple definitions of some method, provided each has a different signature. Однако в рамках одной программы ни класс, ни структура не могут содержать более одного метода, именуемого Main, определение которых определяет его как точку входа приложения.However, within a single program, no class or struct may contain more than one method called Main whose definition qualifies it to be used as an application entry point. Другие перегруженные версии Main допускаются, однако при условии, что они имеют более одного параметра, или их единственный параметр, отличный от типа string[].Other overloaded versions of Main are permitted, however, provided they have more than one parameter, or their only parameter is other than type string[].

Приложение может состоять из нескольких классов или структур.An application can be made up of multiple classes or structs. В нескольких этих классах или структурах может содержаться метод с именем Main, определение которого используется как точка входа приложения.It is possible for more than one of these classes or structs to contain a method called Main whose definition qualifies it to be used as an application entry point. В таких случаях для выбора одного из этих Main методов в качестве точки входа необходимо использовать внешний механизм (например, параметр компилятора командной строки).In such cases, an external mechanism (such as a command-line compiler option) must be used to select one of these Main methods as the entry point.

В C#каждый метод должен быть определен как член класса или структуры.In C#, every method must be defined as a member of a class or struct. Как правило, объявленный уровень доступности (объявленный уровень доступности) метода определяется модификаторами доступа (модификаторы доступа), указанными в его объявлении, и аналогичный объявленный уровень доступности типа определяется модификаторами доступа, указанными в его объявлении.Ordinarily, the declared accessibility (Declared accessibility) of a method is determined by the access modifiers (Access modifiers) specified in its declaration, and similarly the declared accessibility of a type is determined by the access modifiers specified in its declaration. Чтобы вызываемый метод данного типа мог быть вызван, оба типа и члена должны быть доступны.In order for a given method of a given type to be callable, both the type and the member must be accessible. Однако точка входа приложения является особым случаем.However, the application entry point is a special case. В частности, среда выполнения может получить доступ к точке входа приложения независимо от его объявленной доступности, независимо от объявленной доступности его объявлений включающего типа.Specifically, the execution environment can access the application’s entry point regardless of its declared accessibility and regardless of the declared accessibility of its enclosing type declarations.

Метод точки входа приложения может не находиться в объявлении универсального класса.The application entry point method may not be in a generic class declaration.

Во всех прочих отношениях методы точек входа ведут себя так же, как и не точки входа.In all other respects, entry point methods behave like those that are not entry points.

Завершение работы приложенияApplication termination

Завершение приложения возвращает управление среде выполнения.Application termination returns control to the execution environment.

Если возвращаемым типом для метода точки входа приложения является int, то возвращаемое значение выступает в качестве кода состояния завершенияприложения.If the return type of the application’s entry point method is int, the value returned serves as the application’s termination status code. Этот код предназначен для обеспечения обмена данными об успешном или неуспешном выполнении в среде выполнения.The purpose of this code is to allow communication of success or failure to the execution environment.

Если возвращаемый тип метода точки входа void, достижение правой фигурной скобки (}), которая завершает этот метод, или выполнение инструкции return без выражения, приводит к коду состояния завершения 0.If the return type of the entry point method is void, reaching the right brace (}) which terminates that method, or executing a return statement that has no expression, results in a termination status code of 0.

До завершения работы приложения деструкторы для всех его объектов, которые еще не были собраны сборщиком мусора, вызываются, если такая очистка не была подавлена (например, при вызове метода библиотеки GC.SuppressFinalize).Prior to an application’s termination, destructors for all of its objects that have not yet been garbage collected are called, unless such cleanup has been suppressed (by a call to the library method GC.SuppressFinalize, for example).

ОбъявленияDeclarations

Объявления в C# программе определяют составные элементы программы.Declarations in a C# program define the constituent elements of the program. C#программы организованы с помощью пространств имен (пространств имен), которые могут содержать объявления типов и объявления вложенных пространств имен.C# programs are organized using namespaces (Namespaces), which can contain type declarations and nested namespace declarations. Объявления типов (объявления типов) используются для определения классов (классов), структур (структур), интерфейсов (интерфейсов), перечислений (перечислений) и делегатов (делегатов).Type declarations (Type declarations) are used to define classes (Classes), structs (Structs), interfaces (Interfaces), enums (Enums), and delegates (Delegates). Типы элементов, разрешенные в объявлении типа, зависят от вида объявления типа.The kinds of members permitted in a type declaration depend on the form of the type declaration. Например, объявления класса могут содержать объявления для констант (констант), поля (поля), методы (методы), свойства (Свойства), события (события), индексаторы (индексаторы), операторы (Операторы), конструкторы экземпляров (конструкторы экземпляров), статические конструкторы (Статические конструкторы), деструкторы (деструкторы) и вложенные типы (вложенные типы).For instance, class declarations can contain declarations for constants (Constants), fields (Fields), methods (Methods), properties (Properties), events (Events), indexers (Indexers), operators (Operators), instance constructors (Instance constructors), static constructors (Static constructors), destructors (Destructors), and nested types (Nested types).

Объявление определяет имя в области объявления , к которой принадлежит объявление.A declaration defines a name in the declaration space to which the declaration belongs. За исключением перегруженных членов (сигнатур и перегрузок), ошибка времени компиляции возникает при наличии двух или более объявлений, которые представляют члены с одинаковым именем в области объявления.Except for overloaded members (Signatures and overloading), it is a compile-time error to have two or more declarations that introduce members with the same name in a declaration space. Пространство объявления не может содержать различные виды членов с одинаковыми именами.It is never possible for a declaration space to contain different kinds of members with the same name. Например, область объявления не может содержать поле и метод с тем же именем.For example, a declaration space can never contain a field and a method by the same name.

Существует несколько различных типов пространств объявлений, как описано в следующем разделе.There are several different types of declaration spaces, as described in the following.

  • Во всех исходных файлах программы namespace_member_declarations без включающих namespace_declaration являются членами одного объединенного пространства объявления, называемого глобальным пространством объявления.Within all source files of a program, namespace_member_declarations with no enclosing namespace_declaration are members of a single combined declaration space called the global declaration space.
  • Во всех исходных файлах программы namespace_member_declarations в namespace_declarations с одним и тем же полным именем пространства имен являются элементами в одном объединенном пространстве объявления.Within all source files of a program, namespace_member_declarations within namespace_declarations that have the same fully qualified namespace name are members of a single combined declaration space.
  • В каждом объявлении класса, структуры или интерфейса создается новое пространство объявления.Each class, struct, or interface declaration creates a new declaration space. Имена вводятся в это пространство объявления с помощью class_member_declarations, struct_member_declarations, interface_member_declarations или type_parameters.Names are introduced into this declaration space through class_member_declarations, struct_member_declarations, interface_member_declarations, or type_parameters. За исключением перегруженных объявлений конструктора экземпляров и объявлений статических конструкторов, класс или структура не может содержать объявление члена с тем же именем, что и класс или структура.Except for overloaded instance constructor declarations and static constructor declarations, a class or struct cannot contain a member declaration with the same name as the class or struct. Класс, структура или интерфейс допускает объявление перегруженных методов и индексаторов.A class, struct, or interface permits the declaration of overloaded methods and indexers. Более того, класс или структура допускает объявление перегруженных конструкторов экземпляров и операторов.Furthermore, a class or struct permits the declaration of overloaded instance constructors and operators. Например, класс, структура или интерфейс может содержать несколько объявлений методов с одинаковым именем, при условии, что эти объявления методов различаются в сигнатуре (сигнатуры и перегрузка).For example, a class, struct, or interface may contain multiple method declarations with the same name, provided these method declarations differ in their signature (Signatures and overloading). Обратите внимание, что базовые классы не вносят вклад в область объявления класса, а базовые интерфейсы не вносят вклад в область объявления интерфейса.Note that base classes do not contribute to the declaration space of a class, and base interfaces do not contribute to the declaration space of an interface. Таким образом, производный класс или интерфейс может объявить член с тем же именем, что и у унаследованного члена.Thus, a derived class or interface is allowed to declare a member with the same name as an inherited member. Такой член называется скрытием наследуемого члена.Such a member is said to hide the inherited member.
  • Каждое объявление делегата создает новое пространство объявления.Each delegate declaration creates a new declaration space. Имена вводятся в это пространство объявления с помощью формальных параметров (fixed_parameters и parameter_arrays) и type_parameters.Names are introduced into this declaration space through formal parameters (fixed_parameters and parameter_arrays) and type_parameters.
  • Каждое объявление перечисления создает новую область объявления.Each enumeration declaration creates a new declaration space. Имена вводятся в это пространство объявления с помощью enum_member_declarations.Names are introduced into this declaration space through enum_member_declarations.
  • Каждое объявление метода, объявление индексатора, объявление оператора, объявление конструктора экземпляра и анонимная функция создают новое пространство объявления, именуемое пространством объявления локальной переменной.Each method declaration, indexer declaration, operator declaration, instance constructor declaration and anonymous function creates a new declaration space called a local variable declaration space. Имена вводятся в это пространство объявления с помощью формальных параметров (fixed_parameters и parameter_arrays) и type_parameters.Names are introduced into this declaration space through formal parameters (fixed_parameters and parameter_arrays) and type_parameters. Тело функции-члена или анонимной функции, если таковая имеется, считается вложенным в область объявления локальной переменной.The body of the function member or anonymous function, if any, is considered to be nested within the local variable declaration space. Ошибка д

Справочник по языку — Visual Basic



  • Чтение занимает 2 мин

В этой статье

В этом разделе содержатся справочные сведения о различных аспектах языка Visual Basic.This section provides reference information for various aspects of the Visual Basic language.

В этом разделеIn This Section

Условные обозначения и соглашения о кодеTypographic and Code Conventions
Суммирует сведения о том, как ключевые слова, заполнители и другие элементы языка форматируются в документации по Visual Basic.Summarizes the way that keywords, placeholders, and other elements of the language are formatted in the Visual Basic documentation.

Члены библиотеки времени выполнения Visual BasicVisual Basic Runtime Library Members
Содержит список классов и модулей пространства имен Microsoft.VisualBasic со ссылками на их функции-члены, методы, свойства, константы и перечисления.Lists the classes and modules of the Microsoft.VisualBasic namespace, with links to their member functions, methods, properties, constants, and enumerations.

Ключевые словаKeywords
Содержит список всех ключевых слов Visual Basic и ссылки на дополнительную информацию.Lists all Visual Basic keywords and provides links to more information.

Атрибуты (Visual Basic)Attributes (Visual Basic)
Документирует атрибуты, доступные в Visual Basic.Documents the attributes available in Visual Basic.

Константы и перечисленияConstants and Enumerations
Документирует константы и перечисления, доступные в Visual Basic.Documents the constants and enumerations available in Visual Basic.

Типы данныхData Types
Документирует типы данных, доступные в Visual Basic.Documents the data types available in Visual Basic.

ДирективыDirectives
Документирует директивы компилятора, доступные в Visual Basic.Documents the compiler directives available in Visual Basic.

ФункцииFunctions
Документирует функции времени выполнения, доступные в Visual Basic.Documents the run-time functions available in Visual Basic.

МодификаторыModifiers
Содержит список модификаторов времени выполнения Visual Basic и ссылки на дополнительную информацию.Lists the Visual Basic run-time modifiers and provides links to more information.

МодулиModules
Документирует модули, доступные в Visual Basic, и их члены.Documents the modules available in Visual Basic and their members.

NothingNothing
Описывает значение по умолчанию любого типа данных.Describes the default value of any data type.

ОбъектыObjects
Документирует объекты, доступные в Visual Basic, и их члены.Documents the objects available in Visual Basic and their members.

ОператорыOperators
Документирует операторы, доступные в Visual Basic.Documents the operators available in Visual Basic.

СвойстваProperties
Документирует свойства, доступные в Visual Basic.Documents the properties available in Visual Basic.

ЗапросыQueries
Содержит справочные сведения об использовании выражений LINQ в коде.Provides reference information about using Language-Integrated Query (LINQ) expressions in your code.

ОператорыStatements
Документирует объявления и исполняемые операторы, доступные в Visual Basic.Documents the declaration and executable statements available in Visual Basic.

XML-теги для комментариевXML Comment Tags
Содержит описание комментариев к документации, для которых IntelliSense предоставляется в Visual Basic редакторе кода.Describes the documentation comments for which IntelliSense is provided in the Visual Basic Code Editor.

Свойства оси XMLXML Axis Properties
Приводит ссылки на сведения об использовании свойств оси XML для доступа к XML непосредственно в коде.Provides links to information about using XML axis properties to access XML directly in your code.

XML-литералыXML Literals
Приводит ссылки на сведения об использовании XML-литералов для включения XML непосредственно в код.Provides links to information about using XML literals to incorporate XML directly in your code.

сообщения об ошибкахError Messages
Содержит список Visual Basic компилятора и сообщений об ошибках во время выполнения, а также справку по их обработке.Provides a listing of Visual Basic compiler and run-time error messages and help on how to handle them.

Компилятор Visual Basic с интерфейсом командной строкиVisual Basic Command-Line Compiler
Описывает использование компилятора командной строки в качестве альтернативы компиляции программ из интегрированной среды разработки (IDE) Visual Studio.Describes how to use the command-line compiler as an alternative to compiling programs from within the Visual Studio integrated development environment (IDE).



Сводка по типам данных — Visual Basic



  • Чтение занимает 3 мин

В этой статье

В следующей таблице показаны типы данных Visual Basic, Поддерживаемые типы среды CLR, их номинальное выделение памяти и диапазоны значений.The following table shows the Visual Basic data types, their supporting common language runtime types, their nominal storage allocation, and their value ranges.

Тип Visual BasicVisual Basic typeСтруктура типа среды CLRCommon language runtime type structureНоминальное выделение памятиNominal storage allocationДиапазон значенийValue range
BooleanBooleanBooleanЗависит от реализации платформыDepends on implementing platformTrue или FalseTrue or False
ByteByteByte1 байт1 byteот 0 до 255 (без знака)0 through 255 (unsigned)
Char (одиночный символ)Char (single character)Char2 байта2 bytesот 0 до 65535 (без знака)0 through 65535 (unsigned)
ДатаDateDateTime8 байт8 bytes0:00:00 (полночь) 1 января 0001 г. по 11:59:59 – 31 декабря 99990:00:00 (midnight) on January 1, 0001 through 11:59:59 PM on December 31, 9999
DecimalDecimalDecimal16 байт16 bytesот 0 до +/-79,228,162,514,264,337,593,543,950,335 (+/-7.9…E + 28) без десятичной запятой; от 0 до +/-7.9228162514264337593543950335 с 28 разрядами справа от десятичного разделителя;0 through +/-79,228,162,514,264,337,593,543,950,335 (+/-7.9…E+28) with no decimal point; 0 through +/-7.9228162514264337593543950335 with 28 places to the right of the decimal;

наименьшее ненулевое число — +/-0,0000000000000000000000000001 (+/-1E-28) smallest nonzero number is +/-0.0000000000000000000000000001 (+/-1E-28)

Double (число с плавающей запятой двойной точности)Double (double-precision floating-point)Double8 байт8 bytes-1.79769313486231570 e + 308 до-4.94065645841246544 E-324 для отрицательных значений;-1.79769313486231570E+308 through -4.94065645841246544E-324 for negative values;

4.94065645841246544 e-324 до 1.79769313486231570 E + 308 для положительных значений4.94065645841246544E-324 through 1.79769313486231570E+308 for positive values

Целое числоIntegerInt324 байта4 bytesот-2 147 483 648 до 2 147 483 647 (подписано)-2,147,483,648 through 2,147,483,647 (signed)
Long (длинное целое)Long (long integer)Int648 байт8 bytesот-9223372036854775808 до 9 223 372 036 854 775 807 (от а до 18 ) (подписано)-9,223,372,036,854,775,808 through 9,223,372,036,854,775,807 (9.2…E+18 ) (signed)
ОбъектObjectObjectсмObject (class)4 байта на 32-разрядной платформе4 bytes on 32-bit platform

8 байт на 64-разрядной платформе8 bytes on 64-bit platform

Любой тип может храниться в переменной типаObjectAny type can be stored in a variable of type Object
SByteSByteSByte1 байт1 byteот-128 до 127 (подписано)-128 through 127 (signed)
Short (короткое целое)Short (short integer)Int162 байта2 bytesот-32 768 до 32 767 (подписано)-32,768 through 32,767 (signed)
Single (с плавающей запятой одиночной точности)Single (single-precision floating-point)Single4 байта4 bytes-4028235E e + 38 – 1.401298 E-45 для отрицательных значений;-3.4028235E+38 through -1.401298E-45 for negative values;

1.401298 e-45 до 4028235E E + 38 для положительных значений1.401298E-45 through 3.4028235E+38 for positive values

Строка (переменная длина)String (variable-length)StringсмString (class)Зависит от реализации платформыDepends on implementing platformот 0 до приблизительно 2 000 000 000 символов Юникода0 to approximately 2 billion Unicode characters
UIntegerUIntegerUInt324 байта4 bytesот 0 до 4 294 967 295 (без знака)0 through 4,294,967,295 (unsigned)
ULongULongUInt648 байт8 bytesот 0 до 18446744073709551615 (1.8… E + 19 ) (без знака)0 through 18,446,744,073,709,551,615 (1.8…E+19 ) (unsigned)
Определяемый пользователем (структура)User-Defined (structure)(наследует от ValueType )(inherits from ValueType)Зависит от реализации платформыDepends on implementing platformКаждый элемент структуры имеет диапазон, определяемый типом данных и не зависящий от диапазонов других элементов.Each member of the structure has a range determined by its data type and independent of the ranges of the other members
UShortUShortUInt162 байта2 bytesот 0 до 65 535 (без знака)0 through 65,535 (unsigned)

В экспоненциальном представлении«E» означает степень числа 10. In scientific notation, «E» refers to a power of 10. Итак, 3.56 E+ 2 означает 3,56 x 10 или 356, а 3.56 e-2 — 3,56/102 или 0,0356.So 3.56E+2 signifies 3.56 x 102 or 356, and 3.56E-2 signifies 3.56 / 102 or 0.0356.

Примечание

Для строк, содержащих текст, используйте StrConv функцию для преобразования одного текстового формата в другой.For strings containing text, use the StrConv function to convert from one text format to another.

Помимо указания типа данных в операторе объявления, можно принудительно задать тип данных некоторых элементов программирования с помощью символа типа.In addition to specifying a data type in a declaration statement, you can force the data type of some programming elements by using a type character. См. раздел символы типа.See Type Characters.

Затраты памятиMemory Consumption

При объявлении простейшего типа данных нельзя считать, что его потребление памяти совпадает с номинальным выделением хранилища.When you declare an elementary data type, it is not safe to assume that its memory consumption is the same as its nominal storage allocation. Это обусловлено следующими соображениями.This is due to the following considerations:

  • Назначение хранилища.Storage Assignment. Среда CLR может назначать хранилище на основе текущих характеристик платформы, в которой выполняются приложения.The common language runtime can assign storage based on the current characteristics of the platform on which your application is executing. Если память почти заполнена, она может упаковать объявленные элементы как можно ближе друг к другу.If memory is nearly full, it might pack your declared elements as closely together as possible. В других случаях адреса памяти могут быть согласованы с естественными аппаратными границами для оптимизации производительности.In other cases it might align their memory addresses to natural hardware boundaries to optimize performance.

  • Ширина платформы.Platform Width. Назначение хранилища на 64-разрядной платформе отличается от назначения на 32-разрядной платформе.Storage assignment on a 64-bit platform is different from assignment on a 32-bit platform.

Составные типы данныхComposite Data Types

Те же рекомендации применимы к каждому элементу составного типа данных, такому как структура или массив.The same considerations apply to each member of a composite data type, such as a structure or an array. Вы не можете полагаться на простое сложение номинальных выделений памяти для членов типа.You cannot rely on simply adding together the nominal storage allocations of the type’s members. Кроме того, существуют и другие рекомендации, например следующие:Furthermore, there are other considerations, such as the following:

  • За.Overhead. Некоторые составные типы предъявляют дополнительные требования к памяти.Some composite types have additional memory requirements. Например, массив использует дополнительную память для самого массива, а также для каждого измерения.For example, an array uses extra memory for the array itself and also for each dimension. На 32-разрядной платформе этот объем накладных расходов в настоящее время составляет 12 байт плюс 8 байт для каждого измерения.On a 32-bit platform, this overhead is currently 12 bytes plus 8 bytes for each dimension. На 64-разрядной платформе это требование удваивается.On a 64-bit platform this requirement is doubled.

  • Структура хранилища.Storage Layout. Нельзя безопасно предположить, что порядок хранения в памяти совпадает с порядком объявления.You cannot safely assume that the order of storage in memory is the same as your order of declaration. Вы даже не можете делать предположения относительно выравнивания байтов, например 2-байтовой или 4-байтовой границы.You cannot even make assumptions about byte alignment, such as a 2-byte or 4-byte boundary. При определении класса или структуры и необходимости управления структурой хранения его элементов можно применить StructLayoutAttribute атрибут к классу или структуре.If you are defining a class or structure and you need to control the storage layout of its members, you can apply the StructLayoutAttribute attribute to the class or structure.

Издержки объектаObject Overhead

При Object ссылке на любой простой или составной тип данных в дополнение к данным, содержащимся в типе данных, используется 4 байта.An Object referring to any elementary or composite data type uses 4 bytes in addition to the data contained in the data type.

См. также разделSee also

Арифметические операторы — Visual Basic



  • Чтение занимает 4 мин

В этой статье

Арифметические операторы используются для выполнения многих знакомых арифметических операций, использующих вычисление числовых значений, представленных литералами, переменными, другими выражениями, вызовами функций и свойств и констант.Arithmetic operators are used to perform many of the familiar arithmetic operations that involve the calculation of numeric values represented by literals, variables, other expressions, function and property calls, and constants. Кроме того, классификация с помощью арифметических операторов — это операторы сдвига в битах, которые действуют на уровне отдельных битов операндов и сдвигаются их битовые шаблоны влево или вправо.Also classified with arithmetic operators are the bit-shift operators, which act at the level of the individual bits of the operands and shift their bit patterns to the left or right.

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

Можно добавить два значения в выражение вместе с оператором +или вычесть одно из другого с помощью оператора-operator (Visual Basic), как показано в следующем примере.You can add two values in an expression together with the + Operator, or subtract one from another with the — Operator (Visual Basic), as the following example demonstrates.

Dim x As Integer
x = 67 + 34
x = 32 - 12

Отрицание также использует оператор-operator (Visual Basic), но только с одним операндом, как показано в следующем примере.Negation also uses the — Operator (Visual Basic), but with only one operand, as the following example demonstrates.

Dim x As Integer = 65
Dim y As Integer
y = -x

При умножении и разделении используются оператор * и оператор (Visual Basic)соответственно, как показано в следующем примере.Multiplication and division use the * Operator and / Operator (Visual Basic), respectively, as the following example demonstrates.

Dim y As Double
y = 45 * 55.23
y = 32 / 23

В возведение в степень используется оператор ^, как показано в следующем примере.Exponentiation uses the ^ Operator, as the following example demonstrates.

Dim z As Double
z = 23 ^ 3
' The preceding statement sets z to 12167 (the cube of 23).

Целочисленное деление выполняется с помощью оператора \ (Visual Basic).Integer division is carried out using the \ Operator (Visual Basic). Целочисленное деление Возвращает частное, то есть целое число, представляющее количество, которое делитель может разделить на делимое, без учета остатка.Integer division returns the quotient, that is, the integer that represents the number of times the divisor can divide into the dividend without consideration of any remainder. Делитель и делимое должны быть целочисленными типами ( SByte , Byte ,,,, Short UShort Integer UInteger , Long и ULong ) для этого оператора.Both the divisor and the dividend must be integral types (SByte, Byte, Short, UShort, Integer, UInteger, Long, and ULong) for this operator. Сначала необходимо преобразовать все остальные типы в целочисленный тип.All other types must be converted to an integral type first. В следующем примере показано целочисленное деление.The following example demonstrates integer division.

Dim k As Integer
k = 23 \ 5
' The preceding statement sets k to 4.

Арифметическая операция деления выполняется с помощью оператора MOD.Modulus arithmetic is performed using the Mod Operator. Этот оператор возвращает остаток от деления делителя на делимое на целое число раз.This operator returns the remainder after dividing the divisor into the dividend an integral number of times. Если и делитель, и делим являются целочисленными типами, возвращаемое значение является целочисленным.If both divisor and dividend are integral types, the returned value is integral. Если делитель и делимые являются типами с плавающей запятой, возвращаемое значение также будет плавающей запятой.If divisor and dividend are floating-point types, the returned value is also floating-point. Следующий пример демонстрирует эту ситуацию.The following example demonstrates this behavior.

Dim x As Integer = 100
Dim y As Integer = 6
Dim z As Integer
z = x Mod y
' The preceding statement sets z to 4.
Dim a As Double = 100.3
Dim b As Double = 4.13
Dim c As Double
c = a Mod b
' The preceding statement sets c to 1.18.

Попыток деления на нольAttempted Division by Zero

Деление на ноль приводит к различным результатам в зависимости от используемых типов данных.Division by zero has different results depending on the data types involved. В целочисленных подразделениях ( SByte , Byte , Short ,,,, UShort Integer UInteger Long , ULong ) .NET Framework создает DivideByZeroException исключение.In integral divisions (SByte, Byte, Short, UShort, Integer, UInteger, Long, ULong), the .NET Framework throws a DivideByZeroException exception. В операциях деления для Decimal Single типа данных или .NET Framework также вызывает DivideByZeroException исключение.In division operations on the Decimal or Single data type, the .NET Framework also throws a DivideByZeroException exception.

В подразделениях с плавающей запятой, включающих Double тип данных, исключение не создается, а результатом является член класса NaN , представляющий, PositiveInfinity или NegativeInfinity , в зависимости от делимого.In floating-point divisions involving the Double data type, no exception is thrown, and the result is the class member representing NaN, PositiveInfinity, or NegativeInfinity, depending on the dividend. В следующей таблице перечислены различные результаты попытки деления Double значения на ноль.The following table summarizes the various results of attempting to divide a Double value by zero.

Тип данных делимогоDividend data typeТип данных делителяDivisor data typeДелимое значениеDividend valueРезультатResult
DoubleDouble00NaN (не является математически определенным числом)NaN (not a mathematically defined number)
DoubleDouble> 0> 0PositiveInfinity
DoubleDouble< 0< 0NegativeInfinity

При перехвате DivideByZeroException исключения можно использовать его члены, чтобы помочь в его обработке.When you catch a DivideByZeroException exception, you can use its members to help you handle it. Например, Message свойство содержит текст сообщения для исключения.For example, the Message property holds the message text for the exception. Дополнительные сведения см. в разделе Оператор Try…Catch…Finally.For more information, see Try…Catch…Finally Statement.

Операции сдвига битовBit-Shift Operations

Операция сдвига в битах выполняет арифметический сдвиг для битового шаблона.A bit-shift operation performs an arithmetic shift on a bit pattern. Шаблон содержится в операнде слева, а операнд справа указывает количество позиций для сдвига шаблона.The pattern is contained in the operand on the left, while the operand on the right specifies the number of positions to shift the pattern. Можно сдвинуть шаблон вправо с помощью оператора>> или слева с помощью оператора<< .You can shift the pattern to the right with the >> Operator or to the left with the << Operator.

Тип данных операнда шаблона должен быть SByte , Byte ,,, Short UShort Integer , UInteger , Long или ULong .The data type of the pattern operand must be SByte, Byte, Short, UShort, Integer, UInteger, Long, or ULong. Тип данных операнда суммы сдвига должен быть Integer или должен быть расширен до Integer .The data type of the shift amount operand must be Integer or must widen to Integer.

Арифметические сдвиги не являются циклическими, то есть биты, сдвинутые за пределы результата, не переносятся на другой конец.Arithmetic shifts are not circular, which means the bits shifted off one end of the result are not reintroduced at the other end. Позиции битов, освобожденные сдвигом, устанавливаются следующим образом:The bit positions vacated by a shift are set as follows:

  • 0 для арифметического сдвига влево0 for an arithmetic left shift

  • 0 для арифметического сдвига вправо положительного числа0 for an arithmetic right shift of a positive number

  • 0 для арифметического сдвига вправо неподписанного типа данных ( Byte , UShort , UInteger , ULong )0 for an arithmetic right shift of an unsigned data type (Byte, UShort, UInteger, ULong)

  • 1 для арифметического сдвига вправо отрицательного числа ( SByte , Short , Integer или Long )1 for an arithmetic right shift of a negative number (SByte, Short, Integer, or Long)

В следующем примере Integer значение сдвигается влево и вправо.The following example shifts an Integer value both left and right.

Dim lResult, rResult As Integer
Dim pattern As Integer = 12
' The low-order bits of pattern are 0000 1100.
lResult = pattern << 3
' A left shift of 3 bits produces a value of 96.
rResult = pattern >> 2
' A right shift of 2 bits produces value of 3.

Арифметические сдвиги никогда не создают исключений переполнения.Arithmetic shifts never generate overflow exceptions.

Битовые операцииBitwise Operations

В дополнение к логическим операторам,,, Not Or And и Xor также выполняют побитовую арифметическую операцию при использовании числовых значений.In addition to being logical operators, Not, Or, And, and Xor also perform bitwise arithmetic when used on numeric values. Дополнительные сведения см. в разделе «битовые операции» в логических и побитовых операторах в Visual Basic.For more information, see «Bitwise Operations» in Logical and Bitwise Operators in Visual Basic.

Безопасность типовType Safety

Обычно операнды должны иметь один и тот же тип.Operands should normally be of the same type. Например, если вы делаете сложение с Integer переменной, то следует добавить ее в другую Integer переменную, а результат также следует присвоить переменной типа Integer .For example, if you are doing addition with an Integer variable, you should add it to another Integer variable, and you should assign the result to a variable of type Integer as well.

Одним из способов обеспечения хорошей строгой типизации кода является использование оператора Option строго.One way to ensure good type-safe coding practice is to use the Option Strict Statement. Если задано Option Strict On , Visual Basic автоматически выполняет строго типизированные преобразования.If you set Option Strict On, Visual Basic automatically performs type-safe conversions. Например, если попытаться добавить Integer переменную в Double переменную и присвоить ей значение Double , операция выполняется обычным образом, так как Integer значение может быть преобразовано в Double без потери данных.For example, if you try to add an Integer variable to a Double variable and assign the value to a Double variable, the operation proceeds normally, because an Integer value can be converted to Double without loss of data. Типы-ненадежные преобразования, с другой стороны, вызывают ошибку компилятора с Option Strict On .Type-unsafe conversions, on the other hand, cause a compiler error with Option Strict On. Например, при попытке добавить Integer переменную в Double переменную и присвоить ей значение Integer , результатом ошибки компилятора является то, что Double переменная не может быть неявно преобразована в тип Integer .For example, if you try to add an Integer variable to a Double variable and assign the value to an Integer variable, a compiler error results, because a Double variable cannot be implicitly converted to type Integer.

Однако если задать Option Strict Off , то Visual Basic допускает неявные сужающие преобразования, хотя они могут привести к непредвиденной утрате данных или точности.If you set Option Strict Off, however, Visual Basic allows implicit narrowing conversions to take place, although they can result in the unexpected loss of data or precision. По этой причине рекомендуется использовать Option Strict On при написании рабочего кода.For this reason, we recommend that you use Option Strict On when writing production code. Для получения дополнительной информации см. Widening and Narrowing Conversions.For more information, see Widening and Narrowing Conversions.

См. такжеSee also

Бейсик — это… Что такое Бейсик?

Бе́йсик (от BASIC, сокращение от англ. Beginner’s All-purpose Symbolic Instruction Code — универсальный код символических инструкций для начинающих[1]) — семейство высокоуровневых языков программирования.

Был разработан в 1963 году профессорами Дартмутского колледжа Томасом Курцем и Джоном Кемени.[2]

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

История

До середины 1960-х годов компьютеры были слишком дорогими машинами, использовавшимися в основном для научно-технических задач и выполнявшими задачи в пакетном, а не интерактивном режиме, и общение с машиной осуществлялось через её оператора.

Языки программирования той поры, как и компьютеры, на которых они использовались, были разработаны для работы с ними обученных технических специалистов и программистов. Поскольку машины были дорогими, то и машинное время было дорого — поэтому на первом месте стояла скорость выполнения программы (скорость счёта).

Однако в течение 1960-х годов цены на компьютеры стали падать так, что даже небольшие компании могли их себе позволить; их быстродействие всё увеличивалось и наступило время, когда стало возможно организовать более эффективную непосредственную работу пользователей с компьютерами в режиме разделения времени (time-sharing).

Рождение

Бейсик был придуман в 1963 году преподавателями Дартмутского Колледжа Джоном Кемени и Томасом Курцем, и под их руководством был реализован командой студентов колледжа. Со временем, когда стали появляться другие диалекты, изначальную реализацию стали называть Dartmouth BASIC.

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

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

  1. быть простым в использовании для начинающих
  2. быть языком программирования общего назначения
  3. предоставлять возможность расширения функциональности, доступную опытным программистам
  4. быть интерактивным
  5. предоставлять ясные сообщения об ошибках
  6. быстро работать на небольших программах
  7. не требовать понимания работы аппаратного обеспечения
  8. защищать пользователя от операционной системы

Язык был основан частично на Фортран II и частично на Алгол 60, с добавлениями, делающими его удобным для работы в режиме разделения времени и, позднее, обработки текста и матричной арифметики. Первоначально Бейсик был реализован на мейнфрейме GE-265 с поддержкой множества терминалов. Вопреки распространённому убеждению, в момент своего появления это был компилируемый язык.

Рост

Несмотря на то, что язык уже использовался на нескольких миникомпьютерах, его настоящее распространение началось с его появления на микрокомпьютере Альтаир 8800. Многие языки программирования были слишком большими, чтобы поместиться в небольшую память, которую пользователи таких машин могли себе позволить. Для машин с таким медленным носителем как бумажная лента (позднее — аудиокассета) и без подходящего текстового редактора такой небольшой язык как Бейсик был отличной находкой.

В 1975 году Microsoft (тогда это были лишь двое — Билл Гейтс и Пол Аллен, при участии Монте Давидова), выпустила Altair BASIC. Затем его версии появились на другой платформе под лицензией и скоро в использовании были уже миллионы копий и вариантов; один из вариантов, Applesoft BASIC, стал стандартным языком на Apple II. Для операционной системы CP/M был создан диалект BASIC-80, надолго определивший развитие языка.

В 1979 году Microsoft обсуждала с несколькими поставщиками компьютеров (включая IBM) лицензирование интерпретатора Бейсик на их машинах. Одна из версий (ROM BASIC) была включена в ПЗУ IBM PC — компьютер мог автоматически загружаться в Бейсик. Так как IBM не придавала тогда большого значения персональным компьютерам (основным полем её деятельности были мейнфреймы), то, вопреки своим принципам, она разрешила Microsoft продавать интерпретатор отдельно. Это сделало последнюю пионером в выпуске ПО нового поколения — не привязанного к конкретной аппаратуре и поставляемого отдельно от компьютера.

Зрелость

В этот период было создано несколько новых версий Бейсика. Microsoft продавала несколько версий Бейсик для MS-DOS/PC DOS, включая BASICA, GW-BASIC (модификация BASICA, не требующая «прошивки» от IBM) и QuickBASIC. Borland, известная своим Turbo Pascal, в 1985 году выпустила Turbo Basic 1.0 (его наследники впоследствии продавались другой компанией под именем PowerBASIC). На домашних компьютерах появились различные версии Бейсика, обычно включавшие в себя расширения для работы с графикой, звуком, команды ОС, а также средства структурного программирования. Некоторые другие языки использовали хорошо известный синтаксис Бейсика в качестве основы, на которой строилась совершенно иная система (см. например, GRASS).

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

Вторую жизнь Бейсик получил с появлением Visual Basic от Microsoft. Хотя и трудно согласиться, что этот язык — действительно Бейсик (несмотря на множество привычных ключевых слов), спустя некоторое время он стал одним из наиболее часто используемых языков на платформе Windows. Microsoft создала вариант под названием WordBasic и использовала его в MS Word до появления Word 97. Вариант Visual Basic for Applications (VBA) был встроен в Microsoft Excel 5.0 в 1993 году, затем в Access 95 в 1995 году, а после и во все остальные инструменты, входящие в пакет Microsoft Office. Internet Explorer 3.0 и выше, а также Microsoft Outlook, включали интерпретатор VBScript.

Бейсик используется в некоторых моделях программируемых калькуляторов. Например, он был встроен в советский калькулятор «Электроника МК-85».

Описание

Синтаксис языка напоминает Фортран и многие элементы — явные заимствования из него. Язык задумывался для обучения, поэтому его конструкции максимально просты. Как и в других языках программирования, ключевые слова взяты из английского языка. Основных типов данных два: строки и числа. С появлением версии Visual Basic, а также различных его модификаций (таких как VBA), в языке появились многие другие типы данных и дополнения, типичные для современных языков программирования (например, такие, как объектная модель). Объявление переменных не требует специальной секции (в отличие, например, от Паскаля). Объявление переменной — это первое её использование.

Ранние версии Бейсика (такие как BASICA, GW-BASIC) существенно отличаются от современных диалектов и сегодня практически не используются.

Ранние версии

Экран с Бейсиком компьютера ДВК

Внешний вид программ на ранних версиях Бейсика во многом определялся тем, что он предназначался для среды программирования со строчным редактором текста. В таком редакторе пользователь не имел возможности отображать весь текст на экране (в окне), перемещаться по нему в любых направлениях с помощью клавиатуры и/или мыши. В строчных редакторах пользователь для изменения строки текста должен дать команду изменения строки с заданным номером, затем ввести новый текст указанной строки. Для вставки новой строки нужно дать команду вставки, опять таки указав номер. Вводимые строки отображаются на экране последовательно (независимо от номеров). Чтобы увидеть сделанные изменения, применяется команда вывода текста, которая выводит строки в правильном порядке (по возрастанию номеров).

Всё это отразилось в Бейсике. Каждая строка начиналась с номера. При вводе в редактор строка оказывалась в исходном тексте программы на позиции, соответствующей её номеру. Для вставки новой строки нужно было дописать строку с номером, находящимся в диапазоне между номерами двух других строк. «Раздвинуть» строки было невозможно, если требовалось вставить новую строку между строками с соседними номерами, приходилось повторно вводить эти строки с другими номерами, чтобы обеспечить разрыв в нумерации (либо применять специальную команду RENUM, которая перенумеровывала все уже введённые строки с постоянным шагом, синхронно изменяя все команды переходов). Для упрощения оперативного редактирования программы сложилась практика нумеровать строки с шагом 10 — это позволяло практически во всех случаях вставлять новые строки без изменения номеров ранее введённых. Например, чтобы добавить третью строку между строками 20 и 30, нужно было написать строку с номером 25. Типичная строка из программы на Бейсике выглядела так:

Изменять вручную номера уже имеющихся строк было небезопасно, так как номера выполняли роль меток для оператора GOTO. Ранее в Бейсике были допустимы только числовые метки для этого оператора, и наличие в каждой строке уникального номера делало возможным безусловный переход к любой из них. Числовые метки и активное использование GOTO было неизбежным при программировании на Бейсике, что способствовало плохой структуре кода и в больших проектах приводило к запутыванию самих авторов. Был даже придуман шуточный термин «макаронное программирование» (spagetti code), потому что логика программы с частыми переходами GOTO напоминает тарелку со спагетти.

Признаком конца оператора служил конец строки. Чтобы на одной строке разместить несколько операторов, нужно поставить между ними двоеточие (это разрешалось не во всех реализациях языка). Имена переменных в большинстве диалектов могли состоять только из одной буквы, после которой можно было добавить одну цифру, что так же не способствовало улучшению понимания кода. Для создания переменной строкового типа нужно было после имени указать знак доллара ($). Переменная без этого знака являлась числовой (с плавающей точкой). Было ещё несколько модификаторов, относящихся к числовому типу: знак процента (%) — целый тип, восклицательный знак (!) — обычная точность, октоторп (#) — двойная точность (для данных с плавающей точкой, то есть дробей). Числовые модификаторы применялись не во всех версиях.

Выражения сходны с большинством других процедурных языков программирования, но в первых вариантах Бейсика их набор был довольно бедным.

Условный оператор (IF..THEN) изначально имел только одну ветвь — ветвь ELSE в нём отсутствовала и моделировалась с помощью безусловного перехода. Так, в нижеследующей программе выполняется элементарная операция — ввод числа и вывод сообщения «Отрицательное число» или «Положительное число или нуль» в зависимости от его значения:

10 INPUT I
20 IF I >= 0 THEN PRINT "Positive number or null" : GOTO 40
30 PRINT "Negative number"
40 END

Имелся оператор перехода по вычисляемой метке ON..GOTO (унаследованный от аналогичной конструкции Фортрана) — в нём после ON указывалось числовое выражение, а после GOTO — список номеров строк. Переход происходил на строку, номер которой в списке соответствовал значению выражения. Присутствуют также циклы (цикл со счётчиком FOR и цикл с предусловием WHILE).

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

Подпрограммы не являлись аналогом функций таких языков, как Си или Паскаль, так как не имели имён и не могли принимать и/или возвращать параметры. Параметры и результаты передавались через глобальные переменные (все переменные в ранних версиях Бейсика были глобальными). Подпрограммы писались обычно в конце модуля, с нумерацией заведомо большей, чем планируемое количество строк (к примеру, нумерация блока подпрограмм могла начинаться с 5000, даже если в программе была пара сотен строк). Подпрограммы не имели заголовков и имён, и ничем не отличались от любого другого участка кода. Вызов подпрограммы осуществлялся с помощью ключевого слова GOSUB <метка>. Это практически клон GOTO, за исключением одного: возврат в точку вызова происходил автоматически, при достижении в подпрограмме ключевого слова RETURN. GOSUB, как и GOTO, только способствовали плохой структуре кода, так как отследить выполнение программы, содержащей большое количество безусловных переходов и подпрограмм, было сложной задачей.

Отсутствие возможности давать подпрограммам имена (и передавать по ним управление), невозможность передачи параметров, отсутствие локальных переменных, использование только числовых меток в больших проектах вызывало путаницу в коде и очень затрудняло отладку.

В некоторых диалектах Бейсика имелась возможность загрузить файл с кодом непосредственно при выполнении программы (текущий при этом выгружался) оператором CHAIN. Это была одна из самых полезных возможностей языка, так как она позволяла разбить большой проект на модули, вызывая их в порядке необходимости.

Редактора кода в ранних версиях, как такового, не было. При запуске интерпретатора Бейсика запускался диалоговый режим ввода команд. Для работы в этом режиме были предусмотрены специальные команды, которые не являлись операторами самого языка (их нельзя было включить в код программы). Это команды по управлению средой ввода, такие как: LIST <диапазон строк> — вывод листинга программы на экран (LLIST — на принтер), SAVE <имя файла> — сохранение текста программы в файл, LOAD <имя файла> — загрузка кода в память и т. д. Запуск программы производился вводом команды RUN. В большинстве интерпретаторов Бейсика в нижней части экрана была строка с этими (и другими) командами.

Если команда начиналась с номера строки (метки), она запоминалась в памяти как часть вводимой программы. Если строка оператора вводилась без номера, она выполнялась сразу же, после нажатия клавиши  ↵ Enter . В качестве первых уроков обучающимся на Бейсике предлагалось поэкспериментировать с таким режимом, когда результат выполнения выражения был виден сразу. Например, если, находясь в режиме диалога, ввести строку PRINT 2+2 и нажать  ↵ Enter , на экране отобразится результат сложения.

Для редактирования уже введённой строки в большинстве реализаций нужно было перепечатать её полностью. Удаление строк производилось командой DELETE <диапазон строк>. Команда RENUM — позволяла восстановить шаг 10 в нумерации строк. Часто возникала ситуация, что штатного шага 10 для будущих строк не хватало (так как такой шаг позволяет добавить лишь 9 строк между требуемыми) и тогда команда RENUM была необходимой (все строки перенумеровывались с шагом 10, и соответствующим образом корректировались строки с GOTO под новую нумерацию строк).

Для выполнения программы на Бейсике использовалась передача имени файла с кодом программы интерпретатору в командной строке. В этом случае, после загрузки кода команда RUN (начать выполнение программы) вызывалась автоматически.

Фрагмент типичной программы на Бейсике:

10 CLS 'Очистка экрана
20 PRINT "Добро пожаловать!" 'Заголовок в первой строке
30 'Цикл, выводящий линию под заголовком, на всю ширину экрана
40 FOR I=1 TO 80
50 PRINT "=";
60 NEXT I
65 'Ввод символьных данных от пользователя (комментарий добавлен после ввода нижних строк)
70 INPUT "Имя:  ",N$
80 INPUT "Фамилия: ",S$
90 INPUT "Отчество: ",T$
95 'Вырезаем копию первых символов из имени и отчества
100 N2$=LEFT$(N$,1)
110 T2$=LEFT$(T$,1)
120 'Выводим результат
130 PRINT "Ваше имя кратко: ";S$;" ";N2$;". ";T2$;"."
140 INPUT "Повторить программу? (Y/N) ",U$
150 IF U$="Y" THEN GOTO 10
160 END

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

Поздние версии

Одним из наиболее распространённых вариантов языка Бейсик стала реализация интерпретатора QBasic корпорации Microsoft. Долгие годы она включалась как бесплатное приложение, входящее в операционные системы MS-DOS и ранних Windows. В нём имелись довольно мощные графические и звуковые возможности, позволяющие создавать на этом языке даже игры.

Бейсик поздних версий (начиная с Turbo Basic и Visual Basic) резко отличается от ранних вариантов. Фактически, это новый язык, который во многом ближе к Фортрану или Паскалю, чем к исходному Бейсику. Основные изменения версий 1990-х годов состоят в следующем:

  • Отказались от представления программы как неструктурированного набора пронумерованных строк. Номера строк превратились в обычные метки, которые стали необязательными и перестали влиять на порядок исполнения программы. Если ранее строка с номером 15 всегда шла в программе раньше строки с номером 20, то теперь порядок исполнения стал определяться порядком расположения строк в исходном коде. Метки перестали быть только числовыми.
  • В языке появились именованные подпрограммы с параметрами, механизм вызова подпрограмм стал обычным: подпрограмма вызывается по имени, с указанием списка фактических параметров.
  • Были введены структурные управляющие конструкции, в результате для организации обычных ветвлений и циклов перестало быть необходимым использование оператора GOTO и меток строк.
  • Существенно расширилась номенклатура типов данных, появилась возможность явно описывать типы обычных переменных.
  • Стали необязательными типизирующие суффиксы в именах переменных, хотя их использование не запрещалось.
  • В более поздних версиях появилась обработка исключений и поддержка элементов ООП.
  • Были введены механизмы поддержки модульности — появилась возможность без «фокусов» (типа динамической загрузки модулей с помощью явных системных вызовов) разделять программу на несколько файлов исходного кода.
  • Появились средства для работы с цветной графикой и звуковой картой.
  • Visual Basic, ориентированный на разработку Windows-приложений с графическим интерфейсом пользователя, был выполнен интегрированным с графическим дизайнером интерфейса, что позволило быстро писать простые программы под Windows.
  • Появились кроссплатформенные реализации, например, FreeBASIC и PureBasic.

Практически все недостатки, присущие ранним версиям языка, были исправлены, и программирование на современных диалектах Бейсика мало отличается от использования других языков и сред (например, таких, как Delphi). Оборотной стороной процесса модификации Basic является то, что язык стал гораздо объёмнее и сложнее, его освоение требует больше времени и усилий.

Фрагмент типичной программы на FreeBASIC:

# Lang "fb"
Dim As String n,s,t,n2,t2
Cls : Print "Добро пожаловать!" 'Заголовок в первой строке
Do
        'Цикл, выводящий линию под заголовком, на всю ширину экрана
        For i As Integer=1  To LoWord(Width)
                Print "=";
        Next i
        'Ввод символьных данных от пользователя
        Input "Имя:  ",n
        Input "Фамилия: ",s
        Input "Отчество: ",t
        'Вырезаем копию первых символов из имени и отчества
        n2=Left(n,1)
        t2=Left(t,1)
        'Выводим результат
        Print "Ваше имя кратко: "; s; " "; n2; ". "; t2; "."
        Print "Повторить программу? (y/n) "
Loop While LCase(Input(1))="y"
End 0

Несмотря на популярность, в 2001 году Microsoft отказалась от дальнейшей поддержки Visual Basic в пользу принципиально нового языка Visual Basic .NET — в этой реализации язык был снова кардинально пересмотрен, и в текущем состоянии он практически совпадает по набору возможностей c языком C#, отличаются только детали синтаксиса и ключевые слова. Таким образом, Basic перерос из средства для создания программ любителям-непрофессионалам до полноценного средства создания программ.

Помимо написания полноценных программ, Бейсик широко применяется как основа для различных скриптовых языков (например, макросы в пакете Microsoft Office пишутся на диалекте VBA).

Критика

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

Одной из «визитных карточек» Эдсгера Дейкстры стало высказывание: «Студентов, ранее изучавших Бейсик, практически невозможно обучить хорошему программированию. Как потенциальные программисты они подверглись необратимой умственной деградации».[3]

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

Производители

В разное время интерпретаторы BASIC выпускались различными организациями, компаниями, фирмами:

Советские:

Реализации

Apple:

Microsoft:

Другие:

Интересные факты

Примечания

Литература

  • Vladimir Dyakonov and other. The Revolutionary Guide to QBASIC. — Birmingham: Wrox Press Ltd, 1996. — 578 p.
  • Дьяконов В. П. Справочник по алгоритмам и программам на языке Бейсик для персональных ЭВМ. — М.: Наука, Физматлит, 1987. — 240 с.
  • Дьяконов В. П. Применение персональных ЭВМ и программирование на языке Бейсик. — М.: Радио и связь, 1989. — 288 с.
  • Дьяконов В. П. Современные зарубежные микрокалькуляторы. — М.: СОЛОН-Р, 2002. — 400 с.
Стандарты

Ссылки

Basic C, Операции, типы, классы хранения

C Programming Tutorial: Basic C, Operations, Types, Storage
Классы

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

Операции :: Операторы отношения

  • Вы, наверное, знакомы с операторами отношения из
    математика. Те же принципы применяются в C, когда вы сравниваете
    два объекта.
  • В C есть шесть возможностей: <, <=,>,> =,! = И
    ==. Первые четыре говорят сами за себя,! = Означает «не равно
    to «и ==» эквивалентно «.
  • Здесь мы можем указать на разницу
    между синтаксисом и семантикой. a = b отличается от
    а == б . Большинство компиляторов C позволяют обоим операторам
    использоваться в условных выражениях вроде if, но у них есть два совершенно разных
    смыслы. Убедитесь, что ваши операторы присваивания находятся там, где вы хотите
    быть и ваши отношения там, где вы хотите реляционных сравнений!

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

  • Логические операторы моделируют логическую алгебру в C..
  • Например, && используется для сравнения двух объектов с помощью И:
    x! = 0 && y! = 0
  • Выражения, содержащие логические операторы, подвергаются
    Оценка короткого замыкания . Возьми
    Приведенный выше пример во внимание. Если x! = 0 оценивает
    на ложь, все утверждение ложно независимо от результата
    из г! = 0 . Это может быть хорошо или плохо
    в зависимости от контекста.(См. Вайс, стр. 51-52).

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

  • Доступны и другие операторы. Два арифметических оператора
    которые часто используются: ++ и - .
    Вы можете размещать их перед или после переменных.
    ++ указывает приращение, - указывает
    декремент. Если впереди стоит оператор, это префикс
    если он расположен сзади, это постфикс .Префикс означает,
    инкремент перед выполнением любых операций, постфикс — инкремент
    потом. Это важные соображения при использовании этих
    операторы.
  • C допускает * = + = / = - = операторов. Например:
      int я = 5;
    
      я * = 5;
     

    После операции int i будет иметь значение 25.

  • Полный список операторов см. В Weiss pg. 51.

Basic C :: Условные обозначения

  • , если используется с вышеуказанными реляционными и логическими
    операторы позволяют использовать условные операторы.Вы можете начать
    блоки кода с использованием { и } . если можно
    быть соединенным с ключевым словом else для обработки альтернативы
    результаты.
  • Модель ? : оператор может быть сокращенным методом для
    означающее (если выражение)? (оценить, если истина): (иначе оценить
    этот). Например, вы можете использовать это в операторе возврата
    или заявление printf для краткости. Осторожно! Это снижает
    читабельность программы… см. Введение. Эта
    никоим образом не ускоряет время выполнения .
  • Оператор switch позволяет быстро использовать if-else
    проверка. Например, если вы хотите определить, что
    char x были и наверняка имеют разные результаты
    значения x, вы можете просто переключить x и запустить
    случаи. Пример кода:

      switch (x) {
      case 'a': / * Что-то делать, когда x равно 'a' * /
        сломать;
      case 'b':
      case 'c':
      case 'd': / * Техника провала... во всех случаях b, c, d используется этот код * /
        сломать;
      default: / * Обрабатываем случаи, когда x не a, b, c или d. ВСЕГДА используйте значение по умолчанию * /
               /* кейс!!! * /
        сломать;
      }
     

Basic C :: Зацикливание

Базовый C :: Типы, квалификаторы типов, классы хранения

  • int, char, float, double являются фундаментальными
    типы данных в C.
  • Модификаторы типа включают: короткий, длинный, беззнаковый, подписанный .Доступны не все комбинации типов и модификаторов.
  • Квалификаторы типа включают ключевые слова: const и
    летучие . Квалификационные места const
    присвоенная переменная в области постоянных данных памяти, что делает
    конкретная переменная не может быть изменена (хотя технически она все еще остается).
    volatile используется реже и сообщает компилятору
    что это значение может быть изменено вне контроля программы.
  • Классы хранения включают: auto, extern, register,
    статический
    .
  • Ключевое слово auto помещает указанную переменную
    в область стека памяти. Обычно это неявный
    в большинстве объявлений переменных, например int i;
  • Ключевое слово extern делает указанную переменную
    доступ к одноименной переменной из другого файла. Эта
    очень полезен для совместного использования переменных в модульных программах.
  • Регистр ключевое слово предлагает для
    компилятор для размещения конкретной переменной в быстром регистре
    память, расположенная непосредственно на ЦП. Большинство компиляторов в наши дни
    (например, gcc) настолько умны, что предложение регистров действительно может
    сделайте вашу программу медленнее.
  • Ключевое слово static полезно для расширения
    время жизни конкретной переменной. Если вы объявляете статическую переменную
    внутри функции переменная остается даже после того, как функция
    вызов давно пропал (переменная помещается в изменяемую область
    объем памяти).Ключевое слово static — это перегруженный . Это
    также используется для объявления переменных как частные для определенного файла
    только при объявлении с глобальными переменными. статический банка
    также может использоваться с функциями, делая эти функции видимыми только
    в сам файл.
  • Строка НЕ является типом , который напрямую поддерживается C. Вы,
    следовательно, не может «присваивать» данные строкам. Строка
    определяется ANSI как массив (или набор) символов.Мы поговорим о струнах более подробно позже …
  • Реляционные и логические операторы используются для сравнения
    выражения.
  • Условные операторы позволяют условное выполнение
    выражения с использованием if, иначе переключите .
  • Циклы позволяют вам делать что-то многократно до точки остановки
    достигнуто.
  • Типы, классы хранения и квалификаторы типов используются для изменения
    область действия и время жизни конкретного типа.

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

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

Если вы видите ошибку, отправьте электронное письмо на адрес ниже, указав
Ошибка. Ваш отзыв очень важен и поможет
постоянно улучшайте эти страницы.

© 1999-2020 Альфред Парк (фред
[АНТИСПАМ-УДАЛИТЬ-ЭТО] В ранду.org)

.

basic_istream — Справочник C ++

Стандартные объекты cin и wcin используют конкретные экземпляры этого шаблона класса.

Объекты этих классов хранят набор внутренних полей, унаследованных от ios_base и basic_ios :

поле функции-члены описание
Форматирование флаги формата флаги
setf
unsetf
Набор внутренних флагов, которые влияют на то, как определенные операции ввода / вывода интерпретируются или генерируются.
См. Тип элемента fmtflags .
ширина поля ширина Ширина следующего отформатированного элемента для вставки.
точность отображения точность Десятичная точность для следующего вставленного значения с плавающей запятой.
locale getloc
imbue
Объект locale , используемый функцией для операций форматированного ввода / вывода, на которые влияют свойства локализации.
символ заполнения заполнить Символ для заполнения отформатированного поля до ширины поля ( ширины ).
Состояние состояние ошибки rdstate
setstate
clear
Текущее состояние ошибки потока.
Индивидуальные значения можно получить, позвонив по номеру хороший , eof , fail и bad .
См. Тип элемента iostate .
маска исключения исключения Флаги состояния, для которых генерируется исключение сбоя.
См. Тип элемента iostate .
Другое Стек обратного вызова register_callback Стек указателей на функции, которые вызываются при возникновении определенных событий.
расширяемые массивы iword
pword
xalloc
Внутренние массивы для хранения объектов типа long и void * .
связанный поток привязка Указатель на выходной поток, который сбрасывается перед каждой операцией ввода-вывода в этом потоке.
буфер потока rdbuf Указатель на связанный объект basic_streambuf , который отвечает за все операции ввода / вывода.

.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *