JavaRush /Java блогу /Random-KY /Javaдагы примитивдик типтер: Алар анчалык примитив эмес
Viacheslav
Деңгээл

Javaдагы примитивдик типтер: Алар анчалык примитив эмес

Группада жарыяланган

Киришүү

Колдонмолорду иштеп чыгуу кээ бир маалыматтар менен иштөө, тагыраак айтканда, аларды сактоо жана иштетүү катары каралышы мүмкүн. Бүгүн мен биринчи негизги аспектиге токтолгум келет. Java'да маалымат кантип сакталат? Бул жерде бизде эки мүмкүн болгон формат бар: маалымдама жана примитивдүү маалымат түрлөрү. Келгиле, примитивдик типтердин түрлөрү жана алар менен иштөө мүмкүнчүлүктөрү жөнүндө сүйлөшөлү (кандай болсо да, бул биздин программалоо тorн билүүбүздүн негизи). Java примитивдүү маалымат түрлөрү бардыгы таянган негиз болуп саналат. Жок, мен такыр эле аша чапкан жокмун. Oracle примитивдерге арналган өзүнчө окуу куралы бар: Примитивдик берorштердин түрлөрү Java тorндеги примитивдик типтер: Алар анчалык примитивдик эмес - 1 Бир аз тарых. Башында нөл болгон. Бирок нөл кызыксыз. Анан бит пайда болду . Эмне үчүн ал мындай деп аталды? Ал « би нары диги т » (экorк сан) деген аббревиатурадан ушундай аталып калган . Башкача айтканда, анын эки гана мааниси бар. Ал эми нөл болгондуктан, азыр 0 же 1 болуп калганы логикалык. Ал эми жашоо кызыктуураак болуп калды. Биттер үйүр-үйүр болуп чогула баштады. Жана бул оторлор byte (byte) деп атала баштаган . Азыркы дүйнөдө byte = 2 үчүнчү даражага, б.а. 8. Бирок бул дайыма эле андай болгон эмес экен. Байт аталышынын кайдан келип чыккандыгы жөнүндө көптөгөн божомолдор, уламыштар, имиштер бар. Кээ бирөөлөр мунун баары ошол кездеги codeдоолорго байланыштуу деп ойлошсо, башкалары маалыматты ушундай жол менен окуу пайдалуураак деп ойлошот. Байт - эстутумдун эң кичинекей даректүү бөлүгү. Бул эстутумда уникалдуу даректери бар byteтар. ByTe бул Binary Term - машина сөзүнүн аббревиатурасы деген уламыш бар. Машина сөзү - жөнөкөй сөз менен айтканда, бул процессор бир операцияда иштете ала турган маалыматтардын көлөмү. Мурда машина сөзүнүн өлчөмү эң кичинекей даректүү эс менен бирдей болгон. Java тorнде өзгөрмөлөр byte маанилерин гана сактай алат. Жогоруда айткандай, Javaда өзгөрмөлөрдүн эки түрү бар:
  • java примитивдик түрлөрү маалымат byteтарынын маанисин түздөн-түз сактайт (биз бул примитивдердин түрлөрүн төмөндө кененирээк карап чыгабыз);
  • шилтеме түрү, an objectтин дарегинин byteтарын үймөктө сактайт, башкача айтканда, бул өзгөрмөлөр аркылуу биз an objectтин өзүнө түздөн-түз жетүү алабыз (an object үчүн алыстан башкаруунун түрү)

Java byte

Ошентип, тарых бизге бир byte берди - биз колдоно ала турган эстутумдун минималдуу көлөмү. Жана ал 8 биттен турат. Javaдагы эң кичинекей бүтүн сан түрү byte. Бул кол коюлган 8 биттик түрү. Бул эмнени билдирет? санап көрөлү. 2^8 256. Бирок биз терс санды кааласакчы? Жана Java иштеп чыгуучулары "10000000" бинардык codeу -128ди билдирет деп чечишти, башкача айтканда, эң маанилүү бит (эң сол бит) бул сан терс экендигин көрсөтөт. Бинардык “0111 1111” 127ге барабар. Башкача айтканда, 128ди эч кандай түрдө белгилөө мүмкүн эмес, анткени -128 болот. Толук эсептөө бул жоопто берилген: Эмне үчүн Java-да byte диапазону -128ден 127ге чейин? Сандар кантип алынганын түшүнүү үчүн, сиз сүрөттү карап чыгышыңыз керек:
Javaдагы примитивдик типтер: Алар анчалык примитивдик эмес - 2
Демек, өлчөмүн эсептөө үчүн 2 ^ (8-1) = 128. Бул минималдуу чеги (жана ал минус бар) -128 болот дегенди билдирет. Ал эми максималдуу 128 – 1 (нөлдү кемитүү). Башкача айтканда, максимум 127 болот. Чынында, биз byte түрү менен "жогорку деңгээлде" көп иштебейбиз. Негизинен бул "чийки" маалыматтарды иштетүү. Мисалы, тармак аркылуу берorштерди берүү менен иштөөдө, маалыматтар кандайдыр бир байланыш каналы аркылуу берилүүчү 0 жана 1 жыйындысы болгондо. Же файлдардан маалыматтарды окуп жатканда. Аларды саптар жана codeдоолор менен иштөөдө да колдонсо болот. Мисал code:
public static void main(String []args){
        byte value = 2;
        byte shortByteValue = 0b10; // 2
        System.out.println(shortByteValue);
        // Начиная с JDK7 мы можем разделять литералы подчёркиваниями
        byte minByteValue = (byte) 0B1000_0000; // -128
        byte maxByteValue = (byte) 0b0111_1111; // 127
        byte minusByteValue = (byte) 0b1111_1111; // -128 + 127
        System.out.println(minusByteValue);
        System.out.println(minByteValue + " to " + maxByteValue);
}
Айтмакчы, byte түрүн колдонуу эстутум керектөөсүн азайтат деп ойлобоңуз. Байт негизинен массивдерде маалыматтарды сактоодо эстутум керектөөсүн азайтуу үчүн колдонулат (мисалы, byte массивинде ишке ашырыла турган кээ бир буферде тармак аркылуу алынган маалыматтарды сактоо). Бирок маалыматтар боюнча операцияларды аткарууда byteты колдонуу сиздин күткөнүңүзгө жооп бербейт. Бул Java Virtual Machine (JVM) ишке ашыруу менен шартталган. Көпчүлүк системалар 32 же 64 бит болгондуктан, эсептөөлөр учурунда byte жана кыска 32 биттик интке айланат, ал жөнүндө кийинчерээк сүйлөшөбүз. Бул эсептөөлөрдү жеңилдетет. Көбүрөөк маалымат алуу үчүн, караңыз: Байттарды кошуу Java тorнин эрежелеринен уламбы же jvmден уламбы? . Жооп ошондой эле JLS (Java Language Specification) шилтемелерин камтыйт. Мындан тышкары, byteтарды туура эмес жерде колдонуу ыңгайсыз учурларга алып келиши мүмкүн:
public static void main(String []args){
        for (byte i = 1; i <= 200; i++) {
            System.out.println(i);
        }
}
Бул жерде цикл болот. Эсептөөчүнүн мааниси максимумга (127) жеткендиктен, ашып кетүү пайда болуп, маани -128ге айланат. Ал эми биз циклден эч качан чыга албайбыз.

кыска

Байттык маанилердин чеги абдан аз. Ошондуктан, кийинки маалымат түрү үчүн биз бит санын эки эсеге көбөйтүүнү чечтик. Башкача айтканда, азыр 8 бит эмес, 16. Башкача айтканда, 2 byte. баалуулуктар ошол эле жол менен эсептелиши мүмкүн. 2^(16-1) = 2^15 = 32768. Бул диапазон -32768ден 32767ге чейин дегенди билдирет. Ал өзгөчө учурларда өтө сейрек колдонулат. Java тorнин documentтеринде айтылгандай: " сиз чоң массивдерде эстутумду сактоо үчүн кыска колдоно аласыз ."

int

Ошентип, биз эң көп колдонулган түргө келдик. Ал 32 бит же 4 byte алат. Жалпысынан эки эсеге көбөйүүнү улантабыз. Маанилердин диапазону -2^31ден 2^31-1ге чейин.

Максималдуу int мааниси

int 2147483648 максималдуу мааниси 1 болуп саналат, бул такыр эле аз эмес. Жогоруда айтылгандай, эсептөөлөрдү оптималдаштыруу үчүн, анткени Заманбап компьютерлер үчүн алардын биттик сыйымдуулугун эске алуу менен эсептөө ыңгайлуураак; берorштерди int форматына кыйыр түрдө айландырууга болот. Бул жерде жөнөкөй мисал:
byte a = 1;
byte b = 2;
byte result = a + b;
Мындай зыянсыз code, бирок биз катаны алабыз: "ката: шайкеш келбеген түрлөр: intтен byteка жоготууга айландыруу мүмкүн." Сиз аны byte натыйжасына тууралашыңыз керек = (byte)(a + b); Жана дагы бир зыянсыз мисал. Төмөнкү codeду иштетсек эмне болот?
int value = 4;
System.out.println(8/value);
System.out.println(9/value);
System.out.println(10/value);
System.out.println(11/value);
Анан жыйынтык чыгарабыз
2
2
2
2
*паника үндөр*
Чындыгында, int маанилери менен иштөөдө, калган бүт бөлүгүн гана калтырып, жокко чыгарылат (мындай учурларда double колдонуу жакшы).

узун

Биз дагы эки эселенген. 32ни 2ге көбөйтүп, 64 бит алабыз. Салт боюнча, бул 4 * 2, башкача айтканда, 8 byte. Маанилердин диапазону -2^63тен 2^63ке чейин – 1. Жетиштүү. Бул түрү чоң, чоң сандарды эсептөөгө мүмкүндүк берет. Көбүнчө убакыт менен иштөөдө колдонулат. Же, мисалы, узак аралыкта. Сандын узун экенин көрсөтүү үчүн, сандан кийин L – Long литералын коюңуз. Мисал:
long longValue = 4;
longValue = 1l; // Не ошибка, но плохо читается
longValue = 2L; // Идеально
Мен озумдон озуп кетким келет. Андан кийин, примитивдер менен an object катары иштөөгө мүмкүндүк берген примитивдер үчүн тиешелүү орогучтар бар экендигин карап чыгабыз. Бирок бир кызыктуу өзгөчөлүгү бар. Бул жерде бир мисал: Ошол эле Tutorialspoint онлайн компиляторун колдонуп, төмөнкү codeду текшере аласыз:
public class HelloWorld {

     public static void main(String []args) {
        printLong(4);
     }

    public static void printLong(long longValue) {
        System.out.println(longValue);
    }
}
Бул code катасыз иштейт, баары жакшы. Бирок printLong методундагы түрү longдан Longга алмаштырылгандан кийин (б.а. тип примитивдүү эмес, an object болуп калат), Java үчүн биз кайсы параметрди өткөрүп жатканыбыз түшүнүксүз болуп калат. Ал int өткөрүлүп жатат деп ойлой баштайт жана ката болот. Ошондуктан, ыкма учурда, ал ачык 4L көрсөтүү зарыл болот. Маалыматтар базалары менен иштөөдө ID катары көбүнчө узун колдонулат.

Java float жана Java кош

Бул түрлөрү калкыма чекит түрлөрү деп аталат. Башкача айтканда, бул бүтүн сан түрлөрү эмес. Float түрү 32 бит (int сыяктуу), ал эми double кош тактык түрү деп аталат, ошондуктан ал 64 бит (бизге жаккандай 2ге көбөйтүлөт). Мисал:
public static void main(String []args){
        // float floatValue = 2.3; lossy conversion from double to float
        float floatValue = 2.3F;
        floatValue = 2.3f;
        double doubleValue = 2.3;
        System.out.println(floatValue);
        double cinema = 7D;
}
Жана бул жерде баалуулуктардагы айырманын мисалы (түрдүн тактыгынан улам):
public static void main(String []args){
        float piValue = (float)Math.PI;
        double piValueExt = Math.PI;
        System.out.println("Float value: " + piValue );
        System.out.println("Double value: " + piValueExt );
 }
Бул примитивдүү типтер, мисалы, математикада колдонулат. Бул жерде далил, PI санын эсептөө үчүн туруктуу . Жалпысынан алганда, сиз математика классынын API'син карасаңыз болот. Бул жерде дагы эмне маанилүү жана кызыктуу болушу керек: атүгүл documentтерде мындай деп айтылат: “ Бул маалымат түрү эч качан валюта сыяктуу так баалуулуктар үчүн колдонулбашы керек. Ал үчүн анын ордуна java.math.BigDecimal классын колдонушуңуз керек болот. Сандар жана саптар BigDecimal жана Java платформасы тарабынан берилген башка пайдалуу класстарды камтыйт. " Башкача айтканда, калкып чыгуучу жана эки эселенген акчаны эсептөөнүн кереги жок. NASAдагы иштин мисалын колдонуу менен тактык жөнүндө мисал: Java BigDecimal, Жогорку тактыктагы эсептөөлөр менен иштөө . Муну өзүңүз сезүү үчүн:
public static void main(String []args){
        float amount = 1.0000005F;
        float avalue = 0.0000004F;
        float result = amount - avalue;
        System.out.println(result);
}
Бул мисалды аткарыңыз, анан 5 жана 4 сандарынын алдына 0 кошуп коюңуз. Ошондо сиз баардык коркунучту көрөсүз) Орус тorнде флоат жана дубль жөнүндө кызыктуу репортаж бар: https://youtu.be/1RCn5ruN1fk Иштөө мисалдары BigDecimal менен бул жерден көрүүгө болот: BigDecimal менен центтерди жасаңыз Айтмакчы, float жана double бир сандан да көптү кайтара алат. Мисалы, төмөнкү мисал Infinity кайтарат:
public static void main(String []args){
        double positive_infinity = 12.0 / 0;
        System.out.println(positive_infinity);
}
Жана бул NAN кайтарат:
public static void main(String []args){
        double positive_infinity = 12.0 / 0;
        double negative_infinity = -15.0 / 0;
        System.out.println(positive_infinity + negative_infinity);
}
Бул чексиздик жөнүндө түшүнүктүү. NaN деген эмне? Бул сан эмес , натыйжаны эсептөө мүмкүн эмес жана сан эмес. Бул жерде бир мисал: Биз -4түн квадрат тамырын эсептегибиз келет. 4түн квадрат түбү 2. Башкача айтканда, 2ни квадраттап, анан 4тү алабыз. -4 алуу үчүн эмнени квадраттоо керек? Бул иштебейт, анткени... оң сан бар болсо, анда ал калат. Ал эми терс болсо, минус менен минус плюс берет. Башкача айтканда, аны эсептөө мүмкүн эмес.
public static void main(String []args){
        double sqrt = Math.sqrt(-4);
        System.out.println(sqrt + 1);
        if (Double.isNaN(sqrt)) {
           System.out.println("So sad");
        }
        System.out.println(Double.NaN == sqrt);
}
Бул жерде калкыма чекиттүү сандар темасы боюнча дагы бир сонун сереп: Сиздин оюңуз кайда?
Дагы эмнени окуу керек:

Java логикалык

Кийинки түрү буль (логикалык түрү). Ал ачкыч сөздөр болгон чындык же жалган маанилерди гана кабыл алат. while циклдери сыяктуу логикалык операцияларда жана if, switch аркылуу бутактандырууда колдонулат. Бул жерден кандай кызыктуу нерселерди биле аласыз? Ооба, мисалы, теориялык жактан бизге 0 же 1, башкача айтканда, чын же жалган маалымат 1 бит гана керек. Бирок, чындыгында, логикалык көбүрөөк эстутумду ээлейт жана бул конкреттүү JVM ишке ашыруусуна жараша болот. Эреже катары, бул int менен бирдей болот. Дагы бир параметр BitSet колдонуу болуп саналат. Бул жерде Java негиздери китебинен кыскача сүрөттөмө: BitSet

Java символу

Эми биз акыркы примитивдүү түргө жеттик. Ошентип, charдагы маалыматтар 16 битти ээлеп, белгини сүрөттөйт. Java char үчүн Юниcode codeдоосун колдонот. Символ эки tableга ылайык коюлушу мүмкүн (сиз аны бул жерден көрө аласыз ):
  • Юниcode символдор tableсы
  • ASCII символдор tableсы
Javaдагы примитивдик типтер: Алар анчалык примитивдик эмес - 3
Студиядагы мисал:
public static void main(String[] args) {
    char symbol = '\u0066'; // Unicode
    symbol = 102; // ASCII
    System.out.println(symbol);
}
Айтмакчы, char негизинен сан болгондуктан, сумма сыяктуу математикалык операцияларды колдойт. Ал эми кээде бул күлкүлүү кесепеттерге алып келиши мүмкүн:
public class HelloWorld{

    public static void main(String []args){
        String costForPrint = "5$";
        System.out.println("Цена только для вас " +
        + costForPrint.charAt(0) + getCurrencyName(costForPrint.charAt(1)));
    }

    public static String getCurrencyName(char symbol) {
        if (symbol == '$') {
            return " долларов";
        } else {
            throw new UnsupportedOperationException("Not implemented yet");
        }
    }

}
Мен онлайн IDEти tutorialspointтен текшерүүнү сунуштайм . Мен конференциялардын биринде бул табышмакты көргөндө маанайымды көтөрдүм. Мисал сизге да жагат деп үмүттөнөм) ЖАҢЫЛАНДЫ: Бул Joker 2017де болгон, отчет: " Java Puzzlers NG S03 - Баарыңар кайдан келе жатасыңар?! "

Литералдар

Литерал - бул ачык көрсөтүлгөн маани. Литералдарды колдонуу менен сиз ар кандай сан системаларында маанилерди белгилей аласыз:
  • Ондук система: 10
  • Он алтылык системасы: 0x1F4, 0x менен башталат
  • Сегиздик системасы: 010, нөлдөн башталат.
  • Бинардык система (Java7ден бери): 0b101, 0b башталат
Мен сегиздик системага дагы бир аз токтолмокмун, анткени бул күлкүлүү:
int costInDollars = 08;
Бул code саптары түзүлбөйт:
error: integer number too large: 08
Бул болбогон нерсе окшойт. Эми экorк жана сегиздик системалар жөнүндө эстеп көрөлү. Бинардык системада эки жок, анткени эки маани бар (0дөн баштап). Ал эми сегиздик системасы нөлдөн баштап 8 мааниге ээ. Башкача айтканда, 8 маанисинин өзү жок. Ошондуктан, бул бир караганда абсурддай көрүнгөн ката. Жана эсиңизде болсун, бул жерде баалуулуктарды которуунун "артынан" эрежеси бар:
Java тorндеги примитивдик типтер: Алар анчалык примитивдик эмес - 4

Каптоочу класстар

Java тorндеги примитивдердин өз орогуч класстары бар, андыктан алар менен an object катары иштей аласыз. Башкача айтканда, ар бир примитивдүү типке тиешелүү шилтеме түрү бар. Java тorндеги примитивдик типтер: Алар анчалык примитивдик эмес - 5Ороо класстары өзгөрүлбөйт: бул an object түзүлгөндөн кийин, анын абалын — маани талаасынын маанисин — өзгөртүүгө болбойт дегенди билдирет. Wrapper класстары акыркы деп жарыяланды: an objectтер, мындайча айтканда, окуу үчүн гана. Бул класстардан тукум кууруу мүмкүн эместигин да айткым келет. Java автоматтык түрдө примитивдүү типтер менен алардын орогучтарынын ортосунда конversionларды жасайт:
Integer x = 9;          // autoboxing
int n = new Integer(3); // unboxing
Примитивдик типтерди шилтеме типтерге (int->Бүтүн) айландыруу процесси autoboxing деп аталат , ал эми тескериси unboxing деп аталат . Бул класстар an objectтин ичинде примитивди сактоого мүмкүндүк берет жана an objectтин өзү Объект сыяктуу иш алып барат (башка an object сыяктуу). Ушунун бардыгы менен биз көп сандагы ар түрдүү, пайдалуу статикалык ыкмаларды алабыз, мисалы, сандарды салыштыруу, символду регистрге которуу, символдун тамга же сан экендигин аныктоо, минималдуу санды издөө ж.б. Берилген функциялардын топтому таңгычтын өзүнөн гана көз каранды. Int үчүн орогучту өзүңүздүн ишке ашыруунун мисалы:
public class CustomerInt {

   private final int value;

   public CustomerInt(int value) {
       this.value = value;
   }

   public int getValue() {
       return value;
   }
}
Негизги топтом, java.lang, мурунтан эле Boolean, Byte, Short, Character, Integer, Float, Long, Double класстарын ишке ашырууга ээ жана биз өзүбүздүн эч нерсебизди жаратуунун кереги жок, бирок даяр болгонду кайра колдонсок болот. бир. Мисалы, мындай класстар бизге, айталы, Тизмени түзүүгө мүмкүнчүлүк берет , анткени Тизме примитивдер эмес an objectтерди гана камтышы керек. Примитивдүү түрдөгү маанини которуу үчүн статикалык valueOf ыкмалары бар, мисалы, Integer.valueOf(4) Integer түрүндөгү an objectти кайтарат. Тескери конвертациялоо үчүн intValue(), longValue() ж.б. методдор бар. Компилятор valueOf жана *Value чакырыктарын өз алдынча киргизет, бул автобокстун жана автобокстун маңызы. Жогоруда келтирилген автопакеттөө жана автоматтык таңгактоо мисалы чындыгында кандай болот:
Integer x = Integer.valueOf(9);
int n = new Integer(3).intValue();
Автопакеттөө жана автоматтык таңгактоо жөнүндө кененирээк бул макаладан окуй аласыз .

Cast

При работе с примитивами существует такое понятие How приведение типов, одно из не очень приятных свойств C++, тем не менее приведение типов сохранено и в языке Java. Иногда мы сталкиваемся с такими ситуациями, когда нам нужно совершать взаимодействия с данными разных типов. И очень хорошо, что в некоторых ситуациях это возможно. В случае с ссылочными переменными, там свои особенности, связанные с полиморфизмом и наследованием, но сегодня мы рассматриваем простые типы и соответственно приведение простых типов. Существует преобразование с расширением и преобразование сужающее. Всё на самом деле просто. Если тип данных становится больше (допустим, был int, а стал long), то тип становится шире (из 32 бит становится 64). И в этом случае мы не рискуем потерять данные, т.к. если влезло в int, то в long влезет тем более, поэтому данное приведение мы не замечаем, так How оно осуществляется автоматически. А вот в обратную сторону преобразование требует явного указания от нас, данное приведение типа называется — сужение. Так сказать, чтобы мы сами сказали: «Да, я даю себе отчёт в этом. В случае чего — виноват сам».
public static void main(String []args){
   int intValue = 128;
   byte value = (byte)intValue;
   System.out.println(value);
}
Whatбы потом в таком случае не говорor что «Ваша Джава плохая», когда получат внезапно -128 instead of 128 ) Мы ведь помним, что в byteе 127 верхнее meaning и всё что находилось выше него соответственно можно потерять. Когда мы явно превратor наш int в byte, то произошло переполнение и meaning стало -128.

Область видимости

Это то место в codeе, где данная переменная будет выполнять свои функции и хранить в себе Howое-то meaning. Когда же эта область закончится, переменная перестанет существовать и будет стерта из памяти и. How уже можно догадаться, посмотреть or получить ее meaning будет невозможно! Так что же это такое — область видимости? Java тorндеги примитивдик типтер: Алар анчалык примитивдик эмес - 6Область определяется "блоком" — вообще всякой областью, замкнутой в фигурные скобки, выход за которые сулит удаление данных объявленных в ней. Или How минимум — сокрытие их от других блоков, открытых вне текущего. В Java область видимости определяется двумя основными способами:
  • Классом.
  • Методом.
Как я и сказал, переменная не видна codeу, если она определена за пределами блока, в котором она была инициализирована. Смотрим пример:
int x;
x = 6;
if (x >= 4) {
   int y = 3;
}
x = y;// переменная y здесь не видна!
И How итог мы получим ошибку:

Error:(10, 21) java: cannot find symbol
  symbol:   variable y
  location: class com.javaRush.test.type.Main
Области видимости могут быть вложенными (если мы объявor переменную в первом, внешнем блоке, то во внутреннем она будет видна).

Заключение

Сегодня мы познакомorсь с восемью примитивными типами в Java. Эти типы можно разделить на четыре группы:
  • Целые числа: byte, short, int, long — представляют собой целые числа со знаком.
  • Числа с плавающей точкой — эта группа включает себе float и double — типы, которые хранят числа с точностью до определённого знака после запятой.
  • Булевы значения — boolean — хранят значения типа "истина/ложь".
  • Белгилер - бул топ символдун түрүн камтыйт.
Жогорудагы текст көрсөткөндөй, Javaдагы примитивдер анчалык примитивдик эмес жана көптөгөн маселелерди натыйжалуу чечүүгө мүмкүндүк берет. Бирок бул ошондой эле биздин программада күтүүсүз жүрүм-турумга туш болгубуз келбесе, эстен чыгарбашыбыз керек болгон кээ бир өзгөчөлүктөр менен тааныштырат. Алар айткандай, баарын төлөш керек. Эгер биз "тик" (кең) диапазону бар примитивди кааласак - узун сыяктуу - биз эстутумдун чоңураак бөлүгүн жана карама-каршы багытта бөлүштүрүүнү курмандыкка чалабыз. Эстутумду сактоо жана byteтарды колдонуу менен биз -128ден 127ге чейинки чектелген диапазонду алабыз.
Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION