JavaRush /Java Blog /Random-KO /기본 유형 캐스팅. int를 short 및 byte로 캐스팅
Георгий
레벨 22
Санкт-Петербург

기본 유형 캐스팅. int를 short 및 byte로 캐스팅

Random-KO 그룹에 게시되었습니다
기본 유형 캐스팅.  int를 short 및 byte로 캐스팅 - 1int일부 유형 값을 type short또는 에 캐스팅하면 byte결과가 예상치 못한 이유는 무엇입니까 ? 알아 보자!
int i = 450;
byte b = (byte)i;
System.out.println(b);
화면 결과:

-62
의외로 이에 대한 논리적 설명이 있으며, 게다가 이 작업은 자신의 손으로 수행할 수 있습니다. 이렇게 하려면 450을 10진수에서 2진수로 변환해야 합니다.

450/2.    0
225/2.    1
112/2.    0
56/2.     0
28/2.     0
14/2.     0
7/2.      1
3/2.      1
1/2.      1
숫자의 오른쪽 열에는 2로 나눈 나머지를 기록하고 나머지가 0인 경우 숫자 자체를 2로 나눈 결과를 기록합니다. 나머지가 1이면 아래에 다음을 씁니다. 2로 나눈 정수 부분입니다. ( 계산 설명이 포함된 온라인 계산기 ). 결과적으로 우리는 이진수 체계 450 = 에서 이를 얻습니다 11100 0010. 모든 유형 번호는 int4바이트 또는 32비트를 차지하며 각 비트는 0 또는 1입니다. 우리의 경우 9비트만 차지하며 원칙적으로 int i = 450이진 시스템에서는 다음과 같습니다.

0000_0000_0000_0000_0000_0001_1100_0010
우리는 변수를 유형의 변수에 쓰고 싶지만 byte유형 번호는 byte1바이트(이 유형의 이름에서 따옴) 또는 8비트를 사용합니다. 따라서 왼쪽의 추가 비트는 단순히 버려지고 결국 다음을 얻습니다.

1100 0010
유형 값 범위 byte: -128 ~ 127. 각 숫자는 8비트를 차지하며 각 숫자의 가장 왼쪽 비트는 부호 비트입니다. 모든 양수의 경우 0과 같고 모든 음수의 경우 1과 같습니다. 위에서 얻은 결과를 10번째 시스템으로 변환하기 위해 서두를 필요가 없습니다. 직접 코드가 아닌 원하는 번호에 대한 추가 코드를 받았습니다 . 가장 왼쪽 비트는 1과 같으므로 숫자는 음수이고 음수의 경우 양수와 달리 직접 코드와 역방향 코드가 일치하지 않습니다. 부호 비트가 0이면 즉시 숫자를 십진수 체계로 변환하여 66을 얻을 수 있습니다. 그러나 부호 비트는 음수이므로 먼저 추가 코드를 직접 코드로 변환 하고 빼기를 추가 해야 합니다. 답변에 서명하세요. 명확성과 교육을 위해 먼저 -15와 같은 숫자의 추가 코드를 가져와 보겠습니다. 이렇게 하려면 양수 표현(숫자 15)의 직접 코드에서 모든 0을 1로 변경하거나 그 반대로 변경해야 합니다(역방향 코드라고도 함). 그런 다음 결과에 1을 추가해야 합니다. 십진법에서는 15 = 0000 1111; 역방향 코드(모두 0을 1로 또는 그 반대로 변경) = 1111 0000; 추가 코드(하나 추가):

1 1 1 1 0 0 0 0
0 0 0 0 0 0 0 1
1 1 1 1 0 0 0 1
숫자 -15에 대한 추가 코드: 1111 0001; 좋습니다. 이제 위의 예와 유사하게 추가 코드를 직접 코드로 변환해야 합니다. 이는 와 같습니다 1100 0010.
  1. 하나를 빼고 역코드를 얻으세요. 이렇게 하는 것이 편리합니다. 답변에 추가 코드를 적어두고 이러한 추가 코드를 얻으려면 무엇을 추가해야 하는지 확인하세요. 가장 오른쪽 숫자부터 시작해 보세요. 0을 얻으려면 무엇에 1을 더해야 할까요? 1이면 10을 얻고, 0은 응답으로 가고, 1은 다음 숫자로 갑니다. 다음으로, 1을 얻으려면 0에 무엇을 더해야 할까요? 하나인데 앞의 숫자에서 1이 나왔으니 응답으로 0을 쓰고, 다음으로 0을 얻으려면 0에 무엇을 더해야 할까요? 물론 0입니다. 그러니까 4번 더요. 그리고 1을 얻으려면 0에 무엇인가를 더해야 하는 마지막 2자리 숫자가 남아 있습니다. 물론 두 경우 모두 1을 더해야 합니다. 합계:

    
    1 1 0 0 0 0 0 1
    0 0 0 0 0 0 0 1
    1 1 0 0 0 0 1 0
  2. 가장 어려운 부분이 끝났습니다! 우리는 역(역) 코드를 받았고 우리가 해야 할 일은 직접 코드를 얻는 것뿐입니다. 우리는 모든 0을 1로 반전하고 그 반대도 마찬가지입니다.

    1100 0001- 역코드;

    0011 1110 - 번호의 직접 코드 또는 오히려 긍정적인 표현입니다.

  3. 십진법으로 변환합니다( 계산 설명이 포함된 온라인 계산기 ):

    0011 1110 = 0∙2^7+0∙2^6+1∙2^5+1∙2^4+1∙2^3+1∙2^2+1∙2^1+0∙2^0 = 0+0+32+16+8+4+2+0 = 62;

    남은 것은 숫자와 답에 마이너스를 추가하는 것뿐입니다.-62.

같은 방식으로 유형의 숫자는 short유형으로 변환됩니다 int.
int i = 10_000_000;
short s = (short)i;
System.out.println(s); // -27008
  1. 10번째 숫자 체계에서는 10,000,000 = 0000 0000 1001 1000 1001 0110 1000 00002번째 숫자 체계에서는.

    Java에서 유형 번호는 int4바이트를 사용하고 유형 short번호는 2바이트 또는 16비트를 사용하므로 왼쪽을 16자리로 자릅니다.

  2. 1001 0110 1000 0000. 가장 왼쪽 비트(부호 비트라고도 알려진 최상위 비트)는 1과 같은 것으로 나타났습니다. 이는 음수에 대한 추가 코드가 있음을 의미하므로 다음 지점으로 넘어갑니다.
  3. 이를 역코드로 번역해 보겠습니다.

    
    1 0 0 1 0 1 1 0 0 1 1 1 1 1 1 1
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
    1 0 0 1 0 1 1 0 1 0 0 0 0 0 0 0

    반환 코드: 1001 0110 0111 1111;

  4. 우리는 직접 코드를 뒤집어서 얻습니다: 0110 1001 1000 0000.

  5. 우리는 이진수 시스템으로 변환하여 숫자의 양수 표현을 얻습니다.

    1∙2^14+1∙2^13+1∙2^11+1∙2^8+1∙2^7 = 16384+8192+2048+256+128 = 27008.
  6. 마이너스를 추가하고 답을 얻으십시오.-27008

기본 유형 캐스팅.  int를 short 및 byte로 캐스팅 - 2순방향, 역방향 및 보완 코드의 온라인 계산기에 연결합니다 . 또한 이 사이트의 계산기 아래에는 역 및 보수 코드에 대한 약간의 이론이 있습니다.
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION