Знаниями нужно делится...

ActionScrips 3 различие int и uint

Назад к списку | Просмотров: 2159

Для многих начинающих программистов разница между int и uint не совсем ясна, тем более если недавно ими был осуществлен переход с не типизированного языка программирования (например actionscript2, javascript или php).

Буква «u» означает UNSIGNED — беззнаковый. То есть тип int имеет диапазон от -2147483648 (-2 в степени 31) до 2147483647 (2 в степени 31 -1), а uint имеет диапазон от 0 до 4294967295 (2 в степени 32 — 1). Более подробно можно почитать про эти типы в официальной документации int, uint.

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

Но возникает вопрос — что будет при выходе за пределы заданных значений типа?

trace((int.MIN_VALUE - 1) + " " + typeof(int.MIN_VALUE - 1) + " " + int.MIN_VALUE ); //-2147483649 number -2147483648
trace((int.MAX_VALUE + 1) + " " + typeof(int.MAX_VALUE + 1) + " " + int.MAX_VALUE ); //2147483648 number 2147483647
			
trace((uint.MIN_VALUE - 1) + " " + typeof(uint.MIN_VALUE - 1) + " " + uint.MIN_VALUE ); //-1 number 0 
trace((uint.MAX_VALUE + 1) + " " + typeof(uint.MAX_VALUE + 1) + " " + uint.MAX_VALUE );//4294967296 number 4294967295

Компилятор автоматически переводит тип к другому - Number (надо отметить что «number» - это значение любого числового типа в ActionScrips 3), размер которого может быть до 53 бит, в то время как int и uint имеет размер 32 бита. От сюда повышение расходов на память. Диапазон значений типа Number от 4.9406564584124654e-324 до 1.79769313486231e+308. Что бы наглядно увидеть количество нулей выполните следующий пример:

trace(Number.MIN_VALUE.toFixed(20) + " " + Number.MAX_VALUE.toFixed(20));

Но если мы попытаемся присвоить в типизированные переменные заведомо больше или меньшие значения, то результат будет следующим:


var i:int =  int.MIN_VALUE - 1;
trace(i + " " + typeof(i) + " "  ); //2147483647 number 
i ++;
trace(i + " " + typeof(i) + " "  ); //-2147483648 number
			
var u:uint =  uint.MIN_VALUE - 1;
trace(u + " " + typeof(u) + " "  ); //4294967295 number 
u ++;
trace(u + " " + typeof(u) + " "  ); //0 number 

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


дата 08/01/2013


Оставить комментарий
2 + 9 =

Топ статей

Патовая ситуация Януковича.
Дата 2014.01.26, автор admin
Настоящий спорт.
Дата 2014.02.08, автор admin
Капкан для России
Дата 2014.03.03, автор Admin
Сталин не был тираном
Дата 2014.04.24, автор Admin
День победы со слезами на глазах...
Дата 2014.05.10, автор admin
Россия, нефть, КОБ.
Дата 2014.12.18, автор Admin
Концепция общественной безопасности и пьяные деньги
Дата 2014.12.24, автор Admin
Ресурсы России
Дата 2017.06.23, автор admin
Настройка SVN сервера по http для freeBSD 8
Дата 2011.03.12, автор администратор
Базовые команды Linux
Дата 2011.12.11