โœ๐Ÿป~ 11.10

[0612] ์—ฐ์‚ฐ์ž, ๋น„ํŠธ ์—ฐ์‚ฐ์ž๋กœ ๋ฐ์ดํ„ฐ ๊ฐ’ ์ถ”์ถœํ•˜๊ธฐ

Nsso 2023. 6. 13. 01:22

๐Ÿง€ ์—ฐ์‚ฐ์ž


์ข…๋ฅ˜ ์—ฐ์‚ฐ์ž ์„ค๋ช…
์‚ฐ์ˆ  ์—ฐ์‚ฐ์ž +    -   *    /    % ์‚ฌ์น™ ์—ฐ์‚ฐ๊ณผ ๋‚˜๋จธ์ง€ ์—ฐ์‚ฐ(%)
๋น„๊ต ์—ฐ์‚ฐ์ž ==    !==    >     >=     <    <= ํฌ๊ณ  ์ž‘์Œ๊ณผ ๊ฐ™๊ณ  ๋‹ค๋ฆ„์„ ๋น„๊ต
๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž &&     ||   AND (๊ทธ๋ฆฌ๊ณ ) ์™€ OR (๋˜๋Š”) ์œผ๋กœ ์กฐ๊ฑด ์—ฐ๊ฒฐ
๋Œ€์ž… ์—ฐ์‚ฐ์ž = ์šฐ๋ณ€์˜ ๊ฐ’์„ ์ขŒ๋ณ€์— ์ €์žฅ
๊ธฐํƒ€ (type)   ?   :   instanceof ํ˜•๋ณ€ํ™˜ ์—ฐ์‚ฐ์ž, ์‚ผํ•ญ ์—ฐ์‚ฐ์ž, Instance of ์—ฐ์‚ฐ์ž

 

  •  ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž 
์—ฐ์‚ฐ์ž ์กฐ๊ฑด
&& ๋‘ ํ•ญ์ด ๋ชจ๋‘ ์ฐธ์ธ ๊ฒฝ์šฐ์—๋งŒ ์ฐธ. ๊ทธ๋ ‡์ง€ ์•Š์„ ์‹œ ๊ฑฐ์ง“.
|| ๋‘ ํ•ญ ์ค‘ ํ•œ ํ•ญ์ด๋ผ๋„ ์ฐธ์ผ ๊ฒฝ์šฐ ์ฐธ.

=> ์ด๋•Œ &&์˜ ๊ฒฝ์šฐ์—๋Š”  (2  >=  x) && (x  <= 4) ์ฒ˜๋Ÿผ x๋ฅผ ๊ฐ€์šด๋ฐ์— 
|| ์˜ ๊ฒฝ์šฐ์—๋Š”  (x  <=  2) || (4  <=  x) ์ฒ˜๋Ÿผ x๋ฅผ ๋ฐ”๊นฅ์—๋‹ค๊ฐ€ ์ ์–ด์ฃผ๋Š” ๊ฒŒ ๋ณด๊ธฐ ์‰ฌ์›€

 

 

  •  ์ฆ๊ฐ/ ๊ฐ์†Œ ์—ฐ์‚ฐ์ž 
์—ฐ์‚ฐ์ž ๊ธฐ๋Šฅ
++ i  (์ „์œ„ํ˜•) ๊ฐ’์ด ์ฐธ์กฐ๋˜๊ธฐ ์ „์— ์ฆ๊ฐ€์‹œํ‚ด
i ++  (ํ›„์œ„ํ˜•) ๊ฐ’์ด ์ฐธ์กฐ๋œ ํ›„์— ์ฆ๊ฐ€์‹œํ‚ด
-- i  (์ „์œ„ํ˜•) ๊ฐ’์ด ์ฐธ์กฐ๋˜๊ธฐ ์ „์— ๊ฐ์†Œ์‹œํ‚ด
i --  (ํ›„์œ„ํ˜•) ๊ฐ’์ด ์ฐธ์กฐ๋œ ํ›„์— ๊ฐ์†Œ์‹œํ‚ด

 

ex)

public class Test01 {
    public static void main(String[] args) {

        int i =3;
        i++;
        System.out.println(i);
        
        ++i;
        System.out.println(i);
        System.out.println(++i);
        System.out.println(i++);
        System.out.println(i);
        
    }
}

//์ถœ๋ ฅ๊ฐ’ : 4, 5, 6, 6, 7

 

  •  ์‚ผํ•ญ ์—ฐ์‚ฐ์ž 

์กฐ๊ฑด์‹ ?  ๊ฒฐ๊ณผ 1  :  ๊ฒฐ๊ณผ 2   =>  ์กฐ๊ฑด์‹ ๊ฐ’์ด ์ฐธ์ด๋ฉด ๊ฒฐ๊ณผ1, ๊ฑฐ์ง“์ด๋ฉด ๊ฒฐ๊ณผ 2
ex )  int num >18?  true : false ;

 

  •  ๋น„ํŠธ ์—ฐ์‚ฐ์ž 
์—ฐ์‚ฐ์ž ์กฐ๊ฑด ์˜ˆ์‹œ 3 = 0011  /  7 = 0111
& (๋น„ํŠธ ๊ต์ง‘ํ•ฉ ์—ฐ์‚ฐ์ž) ๋Œ€์‘๋˜๋Š” ๋น„ํŠธ๊ฐ€ 1์ด๋ฉด 1 ๋ฐ˜ํ™˜ํ•จ 3 & 7 → 0011
|  (๋น„ํŠธ ํ•ฉ์ง‘ํ•ฉ ์—ฐ์‚ฐ์ž) ๋Œ€์‘๋˜๋Š” ๋น„ํŠธ๊ฐ€ ๋‘˜ ์ค‘ ํ•˜๋‚˜๋งŒ 1์ด๋ฉด 1์„ ๋ฐ˜ํ™˜ํ•จ  3 | 7 → 0111
^  (๋น„ํŠธ ์ฐจ์ง‘ํ•ฉ ์—ฐ์‚ฐ์ž) ๋Œ€์‘๋˜๋Š” ๋น„ํŠธ๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅด๋ฉด 1์„ ๋ฐ˜ํ™˜ํ•จ 3 ^ 7 → 0100
~  (๋น„ํŠธ ๋ถ€์ • ์—ฐ์‚ฐ์ž) ๋น„ํŠธ๊ฐ€ 1์ด๋ฉด 0์œผ๋กœ, 0์ด๋ฉด 1๋กœ ๋ฐ˜์ „์‹œํ‚ด  ~3 → 1100

 

  •  ์‰ฌํ”„ํŠธ ์—ฐ์‚ฐ์ž 
์—ฐ์‚ฐ์ž ์กฐ๊ฑด ์˜ˆ์‹œ
<<  (์™ผ์ชฝ ์‰ฌํ”„ํŠธ ์—ฐ์‚ฐ์ž) ์ฃผ์–ด์ง„ ์ˆซ์ž๋งŒํผ ์™ผ์ชฝ์œผ๋กœ ์ด๋™์‹œํ‚ด 3 << 2  0011 << 2 1100 12
>>  (์˜ค๋ฅธ์ชฝ ์‰ฌํ”„ํŠธ ์—ฐ์‚ฐ์ž) ์ฃผ์–ด์ง„ ์ˆซ์ž๋งŒํผ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™์‹œํ‚ด 3 >> 2   0011 >> 2  0000  0

 

 

๐Ÿง€ ์—ฐ์‚ฐ์ž์˜ ๊ฒฐํ•ฉ ๊ทœ์น™


  • ์‚ฐ์ˆ  > ๋น„๊ต > ๋…ผ๋ฆฌ > ๋Œ€์ž… ์ˆœ 
  • ๋‹จํ•ญ > ์ดํ•ญ > ์‚ผํ•ญ ์ˆœ
  • ๋‹จํ•ญ ์—ฐ์‚ฐ์ž์™€ ๋Œ€์ž… ์—ฐ์‚ฐ์ž๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ์—ฐ์‚ฐ์˜ ์ง„ํ–‰ ๋ฐฉํ–ฅ์€ ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ
์—ฐ์‚ฐ์ž ์˜ˆ์‹œ
๋‹จํ•ญ ์—ฐ์‚ฐ์ž i ++
์ดํ•ญ ์—ฐ์‚ฐ์ž num1 + num2;
์‚ผํ•ญ ์—ฐ์‚ฐ์ž int num >18 ?  true : false ;

 

 

๐Ÿง€ ๋น… ์—”๋””์•ˆ(Big Endian)๊ณผ ๋ฆฌํ‹€ ์—”๋””์•ˆ(Little Endian) _ ๋ฐ”์ดํŠธ ์ €์žฅ ์ˆœ์„œ


๋ฐ”์ดํŠธ ์ €์žฅ ์ˆœ์„œ(Byte Order)๋ž€?

=> ์ปดํ“จํ„ฐ ๋ฉ”๋ชจ๋ฆฌ์— ๋ฐ”์ดํŠธ๊ฐ€ ์ €์žฅ๋˜๋Š” ์ˆœ์„œ๋ฅผ ๋งํ•˜๋ฉฐ ๊ทธ์— ๋”ฐ๋ผ ๋น… ์—”๋””์•ˆ ๋ฐฉ์‹๊ณผ ๋ฆฌํ‹€ ์—”๋””์•ˆ ๋ฐฉ์‹์œผ๋กœ ๋‚˜๋‰จ

 

 

 ๋น… ์—”๋””์•ˆ (Big Endian) 

  • ์šฐ๋ฆฌ๊ฐ€ ์™ผ์ชฝ๋ถ€ํ„ฐ ์ฝ์–ด๋‚˜๊ฐ€๋Š” ๋ฐฉ์‹๊ณผ ๋น„์Šทํ•จ
  • ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋œ ์ˆœ์„œ ๊ทธ๋Œ€๋กœ ์ฝ์„ ์ˆ˜ ์žˆ์–ด ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์›€
  • ๋‚ฎ์€ ์ฃผ์†Œ์— ๋ฐ์ดํ„ฐ์˜ ๋†’์€ ๋ฐ”์ดํŠธ๋ถ€ํ„ฐ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹
  • ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•œ ๋ฐ์ดํ„ฐ ์ „์†ก ์‹œ ์ฃผ๋กœ ์‚ฌ์šฉ๋จ
  • ๋น„๊ต ์—ฐ์‚ฐ์—์„œ ๋ฆฌํ‹€ ์—”๋””์•ˆ๋ณด๋‹ค ๋น ๋ฆ„

 

 ๋ฆฌํ‹€ ์—”๋””์•ˆ (Little Endian) 

  • Big Endian๊ณผ ๋ฐ˜๋Œ€
  • ์ž‘์€ ๋‹จ์œ„๊ฐ€ ์•ž์— ๋‚˜์˜ค๋Š” ๊ฒƒ์„ ๋งํ•จ
  • ๋Œ€๋ถ€๋ถ„์˜ ์ธํ…” CPU ๊ณ„์—ด์—์„œ ํ•ด๋‹น ๋ฐฉ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•จ
  • ๋‚ฎ์€ ์ฃผ์†Œ์— ๋ฐ์ดํ„ฐ์˜ ๋‚ฎ์€ ๋ฐ”์ดํŠธ๋ถ€ํ„ฐ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹
  • ์‚ฐ์ˆ  ์—ฐ์‚ฐ์—์„œ ๋น… ์—”๋””์•ˆ๋ณด๋‹ค ๋น ๋ฆ„ 

 

 

๐Ÿง€ ์‘์šฉ ์˜ˆ์ œ


Q. ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•ด ์ด๋ฏธ์ง€ ํŒŒ์ผ ํฌ๊ธฐ ์ถœ๋ ฅํ•ด ๋ณด๊ธฐ

์กฐ๊ฑด : ์ฝ์–ด์˜ฌ ์ด๋ฏธ์ง€๋ฅผ 24bit๋กœ ์ €์žฅํ•˜๊ธฐ

 

 

โœ๐Ÿป ์ด ๋ฌธ์ œ์˜ ํ•ต์‹ฌ ๋ฐ ํ’€์ด

๋”๋ณด๊ธฐ

 

  • ๋น„ํŠธ๋งต ํŒŒ์ผ์€ Signature (2byte)๋ฅผ ์ œ์™ธํ•˜๊ณ  ๊ฐ ๊ณ„์ธต๋งˆ๋‹ค ํ•ด๋‹น ์ด๋ฏธ์ง€์˜ ์ •๋ณด(4byte)๋“ค์„ ๋‹ด๊ณ  ์žˆ์Œ
  • ๊ทธ๋Ÿฌ๋ฏ€๋กœ ๋ฌธ์ œ์—์„œ ์š”๊ตฌํ•œ Image Width์™€ Image Height๋ฅผ ์ถ”์ถœํ•˜๋ ค๋ฉด ๊ทธ ์ „๊นŒ์ง€์˜ 18byte๋ฅผ ๊ฑท์–ด๋‚ธ ํ›„
    Image Width(19~22 byte) ์™€ Image Height(23~26byte)์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์„ ์ฝ์–ด์˜ค๋ฉด ๋จ

 

์ž‘์„ฑ ์ฝ”๋“œ)

import java.io.FileInputStream;
import java.io.IOException;
import java.util.Scanner;

public class Test01 {

		public static void main(String[] args) throws IOException {

			FileInputStream fis = new FileInputStream("res/pic1.bmp");
			Scanner fscan = new Scanner(fis);

			// Image Width ๋„๋‹ฌ ์ „๊นŒ์ง€์˜ 18byte ์ œ์™ธ
	     	//Signautre 
			fis.read();  fis.read();
	        
	        //Filesize
			fis.read();  fis.read();
			fis.read();  fis.read();
	        
	        //Reserved 1,2
			fis.read();  fis.read();
			fis.read();  fis.read();
			
	        //File offset to pixel Array
	        fis.read();  fis.read();
			fis.read();  fis.read();
	        
	        //Dib header size
			fis.read();  fis.read();
			fis.read();  fis.read();

			// Width ๋ถ€๋ถ„ 1byte์”ฉ ์ฝ์–ด์˜ค๊ธฐ
			int w1 = fis.read();
			int w2 = fis.read();
			int w3 = fis.read();
			int w4 = fis.read();

			// Height ๋ถ€๋ถ„ 1byte์”ฉ ์ฝ์–ด์˜ค๊ธฐ
			int h1 = fis.read();
			int h2 = fis.read();
			int h3 = fis.read();
			int h4 = fis.read();
	        
	        //๊ฑฐ๊พธ๋กœ ์ฝํžŒ ๋ฐ์ดํ„ฐ ๊ฐ’ ํ™•์ธํ•˜๊ธฐ
	        System.out.printf("%d,%d,%d,%d", w1, w2, w3, w4);
			System.out.printf("%d,%d,%d,%d", h1, h2, h3, h4);

			// Shift ์—ฐ์‚ฐ์ž๋ฅผ ํ†ตํ•ด ๋‹ค์‹œ ๋’ค์ง‘๊ธฐ
			int width = w1 << 0 | w2 << 8 | w3 << 16 | w4 << 24;
			int height = h1 << 0 | h2 << 8 | h3 << 16 | h4 << 24;
			
			// ์ œ์‹œ๋œ ์ถœ๋ ฅ๊ฐ’ ํ˜•์‹์œผ๋กœ ํŒŒ์ผ๋ช… ์ถœ๋ ฅ
			System.out.println(width + " * " + height);

	}

}

 

  • ํ•ด๋‹น ์ด๋ฏธ์ง€ ํŒŒ์ผ์„ ๋ฐ”์ด๋„ˆ๋ฆฌ ํ”„๋กœ๊ทธ๋žจ์„ ํ†ตํ•ด ์˜คํ”ˆํ•˜๋ฉด ๊ฑฐ๊พธ๋กœ ์ €์žฅ๋˜์–ด์žˆ๋Š” ๊ฐ’์„ 10์ง„์ˆ˜๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ
  • ๋‹ค์‹œ ์ˆœ์„œ๋ฅผ ๋’ค์ง‘์–ด ์ €์žฅํ•ด์ฃผ์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— Shift ์—ฐ์‚ฐ์ž๋ฅผ ํ†ตํ•ด1byte (8bit) ์”ฉ
    ๊ฐ๊ฐ 0, 8, 16, 24 bit์”ฉ ๋ฐ€์–ด์ค˜์•ผ ํ•จ