Java 알아보기: 데이터 유형, 변수 및 연산자

안녕하세요 여러분, 이 기사에서는 Java 데이터 유형, 변수 및 연산자에 대해 공유하겠습니다.

데이터 유형 및 변수

데이터 유형

Java에서 데이터 타입은 기본 데이터 타입과 참조 데이터 타입으로 나뉘는데, 오늘은 기본 데이터 타입에 대해서 집중적으로 설명하겠습니다.

기본 데이터 타입은 정수형, 부동소수점형, 문자형, 불리언형으로 나뉘는데 다음 표를 보자.
여기에 이미지 설명 삽입

정수 유형

바이트 유형

바이트 타입의 크기는 1바이트이고 표현할 수 있는 범위는 -128~127이며 코드를 통해 이 범위를 알 수 있다.

System.out.println(Byte.MIN_VALUE);
System.out.println(Byte.MAX_VALUE);

여기에 이미지 설명 삽입

여기에서 Byte는 바이트 유형의 래퍼 클래스입니다. 이런 식으로 사용할 수 있다는 것을 알고 있는 한 지금 자세히 연구할 필요가 없습니다.

짧은 유형

short 타입의 크기는 2바이트로 -2^15 ~ 2^15-1, 즉 -32768 ~ 32767을 나타낼 수 있다.

System.out.println(Short.MIN_VALUE);
System.out.println(Short.MAX_VALUE);

여기에 이미지 설명 삽입

정수 유형

int 타입의 크기는 4바이트로
-2^31 ~ 2^31-1, -2147483648 ~ 2147483647 범위의 숫자를 표현할 수 있습니다.

System.out.println(Integer.MIN_VALUE);
System.out.println(Integer.MAX_VALUE);

여기에 이미지 설명 삽입

긴 유형

Long 타입의 크기는 8바이트로
-2^63 ~ 2^62-1, -9223372036854775808 ~ 9223372036854775807 범위의 숫자를 표현할 수 있습니다.

System.out.println(Long.MIN_VALUE);
        System.out.println(Long.MAX_VALUE);

여기에 이미지 설명 삽입

여기서 물어볼 수 있습니다. 모두가 C 언어를 배웠는데 왜 long long 유형이 없습니까? 그리고 C 언어에서 int 유형의 크기가 때로는 4바이트, 때로는 8바이트인 이유는 무엇입니까? Java에서 int 유형은 몇 바이트입니까?

Java에는 long long 유형이 없습니다. Java의 long 유형은 8바이트이고 Java의 int 유형은 항상 4바이트이기 때문에 하나는 4바이트이고 다른 하나는 8바이트인 것처럼 보이지 않습니다.

부동 소수점

자바의 부동소수점형은 C언어의 부동소수점형과 동일하며, 부동소수점형은 float형과 double형으로 구분되며, float형의 크기는 4바이트, double형의 크기는 type은 8바이트이고 type도 표현할 수 있는 범위가 있지만 일반적으로 신경쓰지 않는다.

문자 유형

Java의 문자 유형 char은 C 언어의 char 유형과 매우 다릅니다. C 언어에서는 char 유형의 크기가 1바이트인 반면 Java에서는 char 유형의 크기가 2바이트이고 우리 한자도 2바이트이기 때문입니다. 즉, Java에서는 문자를 사용하여 중국어 문자를 저장할 수 있습니다. 예를 들어:

char c = '好';

char 유형이 나타내는 범위는 0~65535인데 -32768~32767이 아닌 이유는 무엇입니까? 유니코드 인코딩은 Java에서 중국어 문자를 나타내는 데 사용되기 때문입니다.
코드로 보자

System.out.println(Character.MIN_VALUE);
System.out.println(Character.MAX_VALUE);

여기에 이미지 설명 삽입

부울 유형

부울 유형의 크기는 불확실하며 그가 나타내는 범위는 거짓과 참뿐입니다.

변하기 쉬운

변수란 무엇입니까?
변수는 Java 프로그램에서 자주 변경될 수 있는 수량을 의미하며 이러한 변수는 데이터 유형으로 정의됩니다.

변수 정의 형식은 다음과 같습니다. 데이터 유형 변수 이름 = 초기값

변수를 정의할 때 변수 값이 데이터 유형으로 표현할 수 있는 범위를 초과할 수 없다는 점에 유의해야 합니다(예: Byte a = 128). 이것이 작동하지 않으면 컴파일러에서 오류를 보고합니다.

우리가 변수를 정의할 때 주의해야 할 점은 long integer와 float형을 정의할 때 조금 수정할 수 있다는 것입니다. Long b = 100L, int와 long 유형을 구분하기 위해 숫자 뒤에 l 또는 L을 추가합니다. float c = 1.0f, float 유형 데이터를 정의할 때 숫자 뒤에 f 또는 F를 추가해야 합니다. 그렇지 않으면 컴파일러에서 다음을 입력합니다. data는 이중 유형으로 간주되며 컴파일러는 오류를 보고합니다.

부동 소수점 변수와 부울 변수에 초점을 맞추겠습니다.

부동 소수점 변수

int a = 3;
int b = 2;
System.out.println(a/b);

이 코드의 출력은 무엇입니까? 1.5? Java와 C 언어 모두에서 이 효과를 살펴보겠습니다
여기에 이미지 설명 삽입
. 즉, /의 양쪽에 있는 숫자가 정수이면 결과도 정수여야 하고 그 결과가 가분성의 결과이면 다음을 얻고 싶습니다. 1.5 우리는 그것에 대해 무엇을 할 수 있습니까? 우리는 부동 소수점 숫자 사이의 나눗셈으로 변환해야 합니다.

double a = 30;
double b = 2.0;
System.out.println(a/b);

여기에 이미지 설명 삽입

double a = 3.0;
int b = 2;
System.out.println(a/b);

여기에 이미지 설명 삽입
이런 식으로 1.5를 쓰는 것도 가능하다. int형은 계산 중 자동으로 double형으로 변환되기 때문이다.

부울 변수

부울 변수는 거짓과 참의 두 가지 값만 가지며 Java와 C 언어에서는 다릅니다. C 언어에서는 다음과 같이 작성할 수 있습니다.

int i = 10;
while(i)
{
    
    
    System.out.println("我好帅");
    i--;
}

그러나 자바에서는 소위 0이 거짓이고 0이 아닌 것이 참이기 때문에 자바로 작성하면 오류가 발생합니다. . 다음과 같이만 작성할 수 있습니다.

int i = 10;
while(i>0)
{
    
    
    System.out.println("我好帅");
    i--;
}

유형 변환

유형은 항상 동일하지 않으며 예를 들어 다음과 같이 변경됩니다.

int a = 10;
Long b = 0L;
b = a;

암시적 변환

여기서 b는 long형 변수이므로 a는 자동으로 long형으로 변환되며, long형 변수는 int형 변수보다 크기 때문에 a는 자동으로 long형으로 변환되어 a에 할당된다. 변환을 암시적 변환이라고 하며 또 다른 암시적 변환이 있습니다.

Byte a = 10;
Byte b = 20;
Byte c = 0;
c = a+b;

이 코드의 경우 컴파일러는 계산 중에 4바이트 미만의 데이터를 4바이트 데이터로 업그레이드하는 원칙을 가지고 있기 때문에 오류를 보고합니다. 즉, a와 b가 먼저 발생합니다. 정수 유형 승격되어 연산을 수행한 다음 int형의 값을 byte형의 변수에 대입하여 에러를 보고하게 되므로 이러한 암묵적 변환에 주의를 기울여야 한다.

명시적 변환

명시적 변환은 다음과 같은 형식
(유형)으로 데이터를 전달하는 것을 의미합니다. 소수점이 없어집니다.

모든 필수 유형 변환이 성공할 수 있는 것은 아니며 유형 변환은 서로 다른 유형 간에 발생할 수 없습니다. 예를 들면 다음과 같습니다.

boolean a = false;
int b = (int)a;

이러한 종류의 컴파일러는 오류를 보고하고 형식 변환에 실패합니다.

운영자

산술 연산자

산술 연산자는 실제로 매우 간단합니다. 여기서 + - * / 너무 많이 소개하지는 않겠습니다. Java에서 %의 개체는 부동 소수점 숫자일 수 있습니다. 예를 들어:

double a = 6.5%3;

결과는 0.5

증가 연산자

+= -= *= /= %=
증분 연산자는 실제로 약어와 같습니다. 증분 연산자를 사용할 때 암시적 변환이 발생하지 않습니다. 예를 들면 다음과 같습니다.

Byte a = 10;
Byte b = 20;
a+=b;

이 코드는 오류를 보고하지 않습니다.

증가/감소 연산자

++   -- 
int a = 1;
int b = a++;
int c = 1;
int d = c+1;

이 코드를 실행한 후 b와 d의 값, a와 c의 값이 모두 다른데 여기서 a++는 접미사 ++이므로 a의 값을 먼저 b에 대입하고 그 다음 ++ , a 값 자체도 ++이지만 d는 c+1 이후의 값이고 c의 값은 여전히 ​​1입니다. 이는 self-increment 또는 self-decrement의 부작용으로 사용 시 주의가 필요합니다.

post ++, -는 pre ++, -, pre ++, -와 달리 +1 또는 -1을 먼저 수행한 후 값을 할당하지만 post ++, -는 값을 할당하는 것입니다. 먼저 + 1 또는 -1.

관계 연산자(상대적으로 간단하지만 너무 많은 설명은 아님)

== > < >= <= !=, == 쓰지 마세요 =.

논리 연산자

&& ||

&&

논리적이며 &&의 양쪽이 참이면 결과는 참이고 그렇지 않으면 거짓입니다.

int x = 1;
if(x == 2 && 1/0 == 0) {
    
    
    System.out.println("ok");
}else {
    
    
    System.out.println(no);
}

여기에 이미지 설명 삽입

이 코드를 실행하면 오류가 발생하지 않습니다. &&의 왼쪽 표현식이 거짓이면 오른쪽 표현식이 실행되지 않기 때문입니다.

||

||의 양쪽에 있는 식 중 하나가 참이면 결과는 참입니다. 마찬가지로 ||의 왼쪽에 있는 식이 참이면 오른쪽에 있는 식이 실행되지 않습니다.

논리 부정이란 식이 참이면 논리 부정의 결과가 거짓이고, 식이 거짓이면 논리 부정의 결과가 참인 것을 의미한다.

비트 연산자

& Bitwise AND
| Bitwise OR
^ Bitwise XOR
~ Bitwise Negative
비트 연산자는 숫자의 2의 보수 형식에서 작동합니다.

& 비트 AND 연산자

해당 이진 값이 모두 1인 경우에만 1이고 그렇지 않으면 0입니다. 예: 15&20, 15를 2진수로 변환하면 1111, 20을 2진수로 10100으로 변환한
후 비트 AND 연산을 수행하면
0 1 1 1 1 1 0
1 0 0 0 0
1 0 0
은 4가 됩니다.

| 비트 OR 연산자

대응하는 두 이진 비트 중 하나는 1입니다.
15|20
0 1 1 1 1
1 0 1 0
0 1 1 1 1 1
은 31입니다

^ 비트별 XOR 연산자

대응하는 두 이진수는 1과 같지 않고 0
15 ^ 20
0 1 1 1 1 1 0
1 0 0
1 1 0 1 1
결과는 27

~ 비트 반전

이진 비트가 0이면 1로, 1이면 0으로
15
1 1 1 1
0 0 0 0
결과는 0입니다.

시프트 연산자

"<<" 이진 비트 왼쪽 시프트
">>" 이진 비트 오른쪽 시프트
">>>" 부호 없는 오른쪽
시프트 시프트 연산자의 연산 개체도 숫자의 이진 보수 형식입니다.

<< 왼쪽 시프트 연산자

왼쪽으로 1
비트 이진 시프트,
오른쪽
에서 0을 보수 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 결과는 30입니다. 왼쪽 시프트 연산자에 2^i를 곱하면 i는 시프트
배수입니다.

>> 오른쪽 시프트 연산자

이진수 비트는 오른쪽으로 1비트 이동하고, 부호 비트는 왼쪽에서 보수화되고, 1은 음수의 보수화되고, 0은 정수용 보수화됩니다. 15>>1 0 0 0 0 0 0 0 0 0 0 0
0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 1 1 결과는 7 입니다
.
-15
원본 코드: 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 역 코드: 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0의 보수: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 0 0 0 1
-15>>1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 그런 다음 이 바이너리를 원래 코드로 변환합니다
. 결과는 -7입니다.
">>" 오른쪽 시프트 연산자는 2^i로 나누는 것과 같습니다.

>>> 부호 없는 오른쪽 시프트

부호 없는 오른쪽 시프트의 왼쪽은 항상 0으로 채워지므로 여기서는 너무 많이 소개하지 않겠습니다.

추천

출처blog.csdn.net/m0_73888323/article/details/130117926