본문 바로가기

📚Study Note/JAVA

float와 double의 정밀도, 비트단위연산자와 논리연산자

/*====================================================
■■■■ 자바 기본 프로그래밍 ■■■■■
- 실수형 데이터타입 정밀도 테스트
=====================================================*/
public class Test021
{
	public static void main(String[] args)
	{
		//○ 주요 변수 선언

		float a = 0; //4바이트 
		double b = 0; //8바이트
		//○ 연산 및 처리
		
		for (int i=1;i<=100000 ;i++ )
		{
			a += 100000;
			b += 100000;

		}

		System.out.println(a); // -==>> 9.9996058E9
		System.out.println(b); //-==>> 1.0E10

		//○ 결과 출력

		System.out.println("float : " + (a/100000));
		System.out.println("double : " + (b/100000));
		/*
		float : 99996.055
		double : 100000.0
		계속하려면 아무 키나 누르십시오 . . .*/

	}
}

 

 

 

 

/*====================================
 ■■■  연산자 (Operator) ■■■
 - 비트 단위 연산자
 =====================================*/

 public class Test022
{
	public static void main(String[] args)
	{
		int a =10 ; int b = -10;

		System.out.printf("~a : %d\n", ~a);
		System.out.printf("~b : %d\n", ~b);		
		
		
		// a = 10  00001010  → 비트열반전 11110101(음수11)
		
		// b = -10  11110110 → 비트열반전 00001001(양수 9)


		/*
		~a : -11
		~b : 9
		계속하려면 아무 키나 누르십시오 . . .*/
		
	}
}

 

 

 

 

 

 

/*====================================
 ■■■  연산자 ( Operator) ■■■
 - 비트 단위 연산자
 =====================================*/

public class Test023
{
	public static void main(String[] args)
	{
		int a = 13, b = 7;
		int c, d, e;

		c = a & b;
		d = a | b;
		e = a ^ b;

		System.out.printf("a & b = %d\n", c);
		System.out.printf("a | b = %d\n", d);
		System.out.printf("a ^ b = %d\n", e);

		/*
		a= 13  → 00001101
		b= 7   → 00000111

		-------------------
		          00000101  → 5
				  00001111  → 15
				  00001010  → 10 ( ^ : 값이 같으면 0, 다르면 1) 

		*/

/*
a & b = 5
a | b = 15
a ^ b = 10
계속하려면 아무 키나 누르십시오 . . .
*/
	}
}

 

 

/*====================================
 ■■■  연산자 ( Operator) ■■■
 - 비트 단위 연산자
 =====================================*/
// 비트 단위 연산자 『xor』 연산자를 활용하여
// 두 변수에 담겨있는 내용(값) 바꾸기

public class Test024
{
	public static void main(String [] args)
	{
		//주요 변수 선언
		int x = 20, y = 23;

		//연산 및 처리
		x=x^y;		//y=y^x;
		y=y^x;		//x=x^y;
		x=x^y;		//y=y^x;

	/*
	x=20 y=23
	x=20^23             00010100  → 20
	                 ^  00010111  → 23
                 -----------------------
	                    00000011  → 3

	
	x=3
	y=23^3              00010111  → 23
	                 ^  00000011  → 3
				------------------------
					    00010100  → 20

	y=20                00000011  → 3
	x=3^20				00010100  → 20
                ------------------------
					    00010111  → 23
	
	*/


		// 결과 출력
		System.out.printf("x→%d, y→%d\n", x, y);
		/*
		x→23, y→20
		계속하려면 아무 키나 누르십시오 . . .*/
		
	}
}

 

 

 

 

 

 

 

 

 

/*====================================
 ■■■  연산자 ( Operator) ■■■
 - 논리 연산자
 =====================================*/

public class Test025

{
	public static void main(String[] args)
	{
		boolean a=true, b=false;

		System.out.printf("a && b : %b\n", (a&&b));
		System.out.printf("a || b : %b\n", (a||b));
		System.out.printf("!a     : %b\n", (!a));
		System.out.printf("!b     : %b\n", !b);


		/*
		a && b : false
		a || b : true
		!a     : false
		!b     : true
		계속하려면 아무 키나 누르십시오 . . .*/
	}

}

 

 

 

 

/*====================================
 ■■■  연산자 ( Operator) ■■■
 - 비트 단위 연산자
 =====================================*/

public class Test026

{
	public static void main(String[] args)
	{
		int x = 128;
		// 128     → 00000000 00000000 00000000 10000000

		// 128<<3   → 00000000 00000000 00000100 00000000

		// 128     → 00000000 00000000 00000000 10000000

		//128>>3   → 00000000 00000000 00000100 00010000

		System.out.printf("x << 3 = %d\n", (x<<3)); //-==>> x << 3 = 1024
		System.out.printf("x *  8 = %d\n", (x*8));  //-==>> x *  8 = 1024
		System.out.printf("x >> 3 = %d\n", (x>>3)); //-==>> x >> 3 = 16
		System.out.printf("x /  3 = %d\n", (x/8));  //-==>> x /  3 = 16



		System.out.println(); //개행

		System.out.printf("x << 24 =%d\n" , (x<<24));
		// 10000000 00000000 00000000 00000000  //-==>> x << 24 =-2147483648

		System.out.printf("x << 25 =%d\n" , (x<<25)); //0
		System.out.printf("x << 26 =%d\n" , (x<<26)); //0
		System.out.printf("x << 27 =%d\n" , (x<<27)); //0

		System.out.printf("x << 30 =%d\n" , (x<<30)); //0
		System.out.printf("x << 32 =%d\n" , (x<<32)); //128 ★
		System.out.printf("x << 32 =%d\n" , (x<<33)); //256

		// 00000000 00000000 00000000 00000000
		// 1이 한칸 더 움직이면서 마치 낭떠러지떨어지듯 없어져서 0이 된다
		// 그런데 사라진 1이 아예 없어져버리는 것이 아니라
		// ★★★반대편에서 다시 나타난다.
		// ★★★자기 자신의 값을 찾기 전까지는 0인데 원래 값을 찾으면 다시 값이 증가한다.
	}
}