π‘ λͺ¨λ μ½λλ μλ λ§ν¬μμ μ§μ μ€νν΄ λ³Ό μ μλ€.
https://www.sololearn.com/compiler-playground/java
Javaμλ byte
, short
, int
, long
μ 4κ°μ§ μ μ νμ
μ΄ μ‘΄μ¬νλ€.
μ€μ νμ
(number
) νλλ‘ λͺ¨λ μ«μλ₯Ό νννλ JavaScript보λ€λ λ§κ³ ,
λΆνΈ μλ μ μ(unsigned int
)κΉμ§ μ‘΄μ¬νλ Go보λ€λ μ λ€.
κ° νμ μ μμλλ‘ 1, 2, 4, 8 byteμ λ©λͺ¨λ¦¬ 곡κ°μ μ°¨μ§νλ€.
π‘ μ¬μ€
char
μ΄λΌλ 2byte μ μ νμ μ΄ νλ λ μ‘΄μ¬νλ€.
μ΄λ λ¨μΌ μ λμ½λ λ¬Έμλ₯Ό νννκΈ° μν΄ μ¬μ©λλ©°, ν¬κΈ°λshort
μ κ°μ§λ§,
Javaμμ μ μΌνκ² λΆνΈ μλ μ μ νμ μ΄κΈ° λλ¬Έμshort
μ κ°μ byte ν¬κΈ°μμλ λΆκ΅¬νκ³
νμ λ³νμ΄ λΆκ°νλ€.
λΆνΈμ μ 무 λλ¬Έμshort
λ -32,768 ~ 32,767,char
μ 0 ~ 65,535λ‘
λ€λ₯Έ λ²μλ₯Ό κ°κ³ , κ°μ λΉνΈν¨ν΄μ΄μ΄λ λ€λ₯Έ μλ₯Ό κ°λ¦¬ν€κ² λκΈ° λλ¬Έμ΄λ€.
1byteλ 8bitμ΄κΈ° λλ¬Έμ μ΄μ§μλ‘ 2^8κΉμ§ ννμ΄ κ°λ₯νλ€.
byte
νμ
μ 1byteμ΄λ―λ‘ 2^8μΈ 256
κ°μ§ κ²½μ°μ μλ₯Ό ννν μ μκ³ ,
short
λ 2byteμ΄λ―λ‘ 2^16μΈ 65,535
κ°μ§ κ²½μ°μ μλ₯Ό ννν μ μλ€.
κ°μ μλ¦¬λ‘ int
λ 4,294,967,296
κ°μ§,
long
μ 18,446,744,073,709,551,616
κ°μ§ κ²½μ°μ μλ₯Ό ννν μ μλ€.
κ·Έλ λ€λ©΄ λ§μ½ κ° νμ μ λ²μλ₯Ό λμ΄μλ μλ₯Ό λ£μΌλ©΄ μ΄λ»κ² λ κΉ.
public class Program
{
public static void main(String[] args) {
byte b1 = 127;
byte b2 = 128; // Incompatible types. Found: 'int', required: 'byte'
System.out.println(b1);
System.out.println(b2);
}
}
μ€λ₯κ° λ°μνλ€.
κΈ°λ³Έμ μΌλ‘ μ μ 리ν°λ΄μ 4byteμΈ int
λ‘ μΈμνλλ°,
byte
νμ
λ³μμ λ²μλ -128 ~ 127μ΄κΈ° λλ¬Έμ μ΄ λ²μ μμ μ μ 리ν°λ΄μ
byte
νμ
μ λ³μμ λμ
νλ©΄ μλ νλ³νμ ν΄μ£ΌκΈ° λλ¬Έμ μ μμ μΌλ‘ λμνμ§λ§,
μ΄ λ²μλ₯Ό λ²μ΄λλ κ°μ μλμΌλ‘ νλ³ννμ§ μκ³ μ€λ₯λ₯Ό λ°μμν¨λ€.
public class Program
{
public static void main(String[] args) {
byte b1 = 127;
byte b2 = (byte) 128;
System.out.println(b1); // -128
System.out.println(b2);
}
}
byte
λ²μλ₯Ό λ²μ΄λλ μ μ 리ν°λ΄μ byte
νμ
λ³μμ ν λΉνκ³ μΆλ€λ©΄,
μμ κ°μ΄ λͺ
μμ μΌλ‘ νμ
λ³νμ ν΄μ£Όλ©΄ λλ€.
κ·Έλ°λ° 127
μ 1
μ΄ μΆκ°λ 128
μ λμ
νλλ°, κ²°κ³Όλ -128
μ΄ λμ¨λ€.
μ΄μ μΈ μ¦μ¨, byte
λ²μμ μ΅λκ°μ 127
μ΄κ³ , κ±°κΈ°μ 1
μ λνλ©΄ λ²μλ₯Ό λ²μ΄λκΈ° λλ¬Έμ
μ΅μκ°μΈ -128
λ‘ λμκ°κ² λλ κ²μ΄λ€.
μ΄λ₯Ό OverflowλΌκ³ λΆλ₯Έλ€.
νμ
μ΄ κ°μ§ μ μλ μ΅λκ°μ λμ΄κ°μ λ€μ μ΅μκ°μ΄ λ κ²μ΄λ€.
λ°λλ‘ Underflowλ νμ μ΄ κ°μ§ μ μλ μ΅μκ°λ³΄λ€ λ°μΌλ‘ λ΄λ €κ°μ λ€μ μ΅λκ°μ΄ λλ κ²μ΄λ€.
public class Program
{
public static void main(String[] args) {
byte b1 = -128;
byte b2 = (byte) -129;
System.out.println(b1); // 127
System.out.println(b2);
}
}
μλ λ‘κ·Έ μκ³λ₯Ό μκ°νλ©΄ λλ€.
12μμμ 1μκ°μ λνλ©΄ 13μκ° μλ 1μκ° λκ³ ,
1μμμ 1μκ°μ λΉΌλ©΄ 0μκ° μλ 12μκ° λλ κ²κ³Ό μ μ¬νλ€.
byte
νμ
μ μ€μ λ‘ λ©λͺ¨λ¦¬ μμμ 8μΉΈ μ§λ¦¬ byte λ°°μ΄μ΄λΌκ³ μκ°νλ©΄ λλ€.
[0, 0, 0, 0, 0, 0, 0, 0]
κ³Ό κ°μ ννμΌ κ²μ΄λ€.
μ΄λ₯Ό κ°κ²°νκ² 00000000
μΌλ‘ νκΈ°νκ² λ€.
short
λ 2byte ν¬κΈ°μ΄λ―λ‘ 00000000 00000000
κ³Ό κ°μ ννμΌ κ²μ΄λ€.
κ·Έλ λ€λ©΄ λ μ μ λ©λͺ¨λ¦¬ 곡κ°μ κ°λ byte
λ₯Ό short
λ‘ λ³ννλ©΄ μ΄λ»κ² λ κΉ.
11
μ μ΄μ§μλ‘ λνλ΄λ©΄ 00001011
μ΄λ€.
κ·Έλμ byte νμ
μ 11
μ μ μ₯νλ©΄ μ€μ λ‘λ 00001011
μ΄ λ©λͺ¨λ¦¬μ μ μ₯λ κ²μ΄λ€.
μ΄λ₯Ό short
νμ
μΌλ‘ λ³ννλ©΄ μμ 00000000
μ νλ λ λΆμ¬μ£Όλ©΄ λλ€.
00001011
-> 00000000 00001011
μ΄ λλ κ²μ΄λ€.
μμ²λΌ λ μμ νμ
μ λ ν° νμ
μΌλ‘ λ³ννλλ°λ μλ¬΄λ° λ¬Έμ κ° μλ€.
κ·Έλμ Javaλ μ΄λ° κ²½μ° μλμΌλ‘ νμ
λ³νμ ν΄μ€λ€.
κ·Έλμ μ΄λ₯Ό Implicit Type Converion(μμμ νλ³ν)μ΄λΌκ³ λΆλ₯Έλ€.
μ½λλ‘ μ§μ μ€ννλ©° νμΈν΄λ³΄μ.
public class Program
{
public static void main(String[] args) {
byte b = 11;
short s = b;
System.out.println(s); // 11
}
}
short
νμ
λ³μμ byte
νμ
μ κ°μ λ£μ΄λ μ무 λ¬Έμ μμ΄ 11
μ΄ μΆλ ₯λλ κ²μ λ³Ό μ μλ€.
public class Program
{
public static void main(String[] args) {
short s = 1;
char c = s; // java: incompatible types: possible lossy conversion from short to char
}
}
λ¨, char
νμ
μ short
μ λ§μ°¬κ°μ§λ‘ 2byteμ ν¬κΈ°λ₯Ό κ°μ§μλ λΆκ΅¬νκ³ νλ³νμ΄ λΆκ°λ₯νλ€.
μμ μ΄ν΄λ΄€λ― char
κ° μ μ΄μ μμ λ²μλ₯Ό ν¬ν¨νμ§ μλ Unsigned νμ
μ΄κΈ° λλ¬Έμ,
0 ~ 65,535
μ λ²μλ₯Ό κ°μ Έμ κ°μ λΉνΈν¨ν΄μ΄μ΄λ μ ν λ€λ₯Έ μλ₯Ό κ°λ¦¬ν€κΈ° λλ¬Έμ΄λ€.
μκΉμ λ°λλ‘ μ΄λ²μλ λ ν° short
νμ
μ λ μμ byte
νμ
λ³μμ ν λΉν΄λ³΄μ.
public class Program
{
public static void main(String[] args) {
short s = 1;
byte b = s; // java: incompatible types: possible lossy conversion from short to byte
}
}
possible lossy conversion
μ΄λΌλ μ€λ₯κ° λ³΄μΈλ€.
νμ λ³νμΌλ‘ μΈν΄ λ°μ΄ν°κ° μ μ€λ κ°λ₯μ±μ΄ μλ€λ λ»μ΄λ€.
μ μ½λμμ short
νμ
λ³μ s
μ λΉνΈν¨ν΄μ 00000000 00000001
μΌ κ²μ΄λ€.
λ§μ½ μ½λκ° μ μμ μΌλ‘ μ€νλλ€λ©΄ byte
λ 8bitμ΄λ―λ‘
λ·λΆλΆμ λΉνΈν¨ν΄λ§ κ°μ Έμ¬ κ²μ΄κ³ 00000001
μ΄ ν λΉλ κ²μ΄λ€.
μ μΌμ΄μ€μμλ μμ€λλ λ°μ΄ν°κ° μ ν μλ€.
κ·Έλ¬λ s
κ° λ§μ½ 00001111 00000001
μ΄μλ€λ©΄?
μμ 00001111
μ byte
νμ
μ λ³μμ λ΄μ μ μλ€.
μ΄ κ²½μ°μλ λ§μ°¬κ°μ§λ‘ 00000001
λ§ μ μ₯λμ΄ 1
μ΄ λ κ²μ΄λ€.
κ·Έλμ λ°μ΄ν°κ° μ μ€λ κ°λ₯μ±μ΄ μλ€λ μ€λ₯κ° λνλ κ²μ΄λ€.
κ²½μ°μ λ°λΌ λ€λ₯΄κ² μ§λ§ μ€μ μλΉμ€μμ μ΄λ° λ°μ΄ν° μ μ€μ΄ λ°μνλ€λ©΄, κ±°λν μ€λ₯λ₯Ό μ΄λν μ μλ€.
κ³μ’ μ΄μ²΄λ λ‘μΌ κΆ€λλ₯Ό κ³μ°νλ λ±μ μμ£Ό λ―Όκ°ν μμ
μμλ
μμ λ°μ΄ν°μ μμ€μ΄ λμ΄ν¬ μ μλ κ²°κ³Όλ₯Ό λ³κΈ° λλ¬Έμ΄λ€.
κ·Έλμ μ΄λ¬ν μ€λ₯λ₯Ό μ¬μ μλ°©νκΈ° μν΄μ νλ‘κ·Έλ¨μ μ€ννκΈ° μ μΈ μ»΄νμΌ νμμ 미리 μλ €μ£Όλ κ²μ΄κ³ ,
λ§μ½ κ°λ°μκ° μ΄λ¬ν λ°μ΄ν° μ μ€ κ°λ₯μ±μ μκ³ μμμλ λΆκ΅¬νκ³ , μλ²½ν μμ λ²μλ₯Ό 컨νΈλ‘€ν΄μ μ€λ₯λ₯Ό λ°μμν€μ§ μμ μμ μ΄ μλ€λ©΄, κ·Έ λ νμ
λ³νμ λͺ
μνλ©΄ μ λλ‘ μλν κ²μ΄λ€.
public class Program
{
public static void main(String[] args) {
short s = 1;
byte b = (byte) s;
System.out.println(b); // 1
}
}
λ°λ‘ μμ κ°μ κ²½μ°λ€.
1
μ΄ short
μ λ΄κΈ°λ©΄ λΉνΈν¨ν΄μ 00000000 00000001
μ΄λ€.
μ΄ μ€ μ²«λ²μ§Έ byteκ° 00000000
μ΄λ―λ‘ μλ¬΄λ° λ°μ΄ν°κ° λ΄κ²¨μμ§ μλ€λ κ²μ μ°λ¦¬λ νμ€ν μκ³ μλ€.
κ·Έλμ λλ²μ§Έ byteλ§ byte
νμ
λ³μ b
μ λ΄μ κ²μ΄κ³ , μ΄ κ³Όμ μμ μ΄λ ν λ°μ΄ν° μμ€λ μΌμ΄λμ§ μλλ€.
(byte) s
μ κ°μ΄ λ³νν νμ
μ μ§μ λͺ
μν΄μ κ°μ λ‘ νμ
μ λ³ννλ κ²μ νμ
μΊμ€ν
μ΄λΌκ³ λΆλ₯΄λ©°,
μ΄μ λ°λ₯Έ μ€λ₯ λ°μ λ±μ μ±
μμ μ¨μ ν κ°λ°μμκ² μκΈ° λλ¬Έμ μ¬μ©ν λ νμ μ£Όμν΄μΌ νλ€.