본문 바로가기
비트 단기/java

자바 비트연산

by woohyun22 2018. 12. 7.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
package Pack01;
import java.util.LinkedList;
import java.util.Random;
import java.util.Scanner;
import java.util.concurrent.SynchronousQueue;
import java.nio.channels.NetworkChannel;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
public class Hello {
    
    public static void main(String[] args) {
        //java는 이식성이 높다. 안드로이드 등 , os에 영향을 받지 않는다.
        //객체 지향 언어이다. = class로 프로그램을 짠다.(기존 class를 잘 활용하자, 상속처럼)
        //객체 생성시 자동으로 해제해준다 // 모아서 버려주는거 garbage collection
        //클래스 지원이 끝도없다. 
        //이클립스 IDE활용 자바 개발환경이 가장 보편적이다.
        
        /*byte z;//1
        
        short c;//2
        char t;//2
        
        int a;//4
        long b;//
        
        float e;
        double f;
        
        boolean d;*/
        
        //비트연산제어
        //-c전용이다 하지만 자바에 있긴하다
        //보통 비트연산제어는 10진수 안쓴다. 16진수를 쓴다.
        //F = 15 1248 -> 4비트
        int a = 0X3F5A;
        int b = 0X00003F5A;//16진수표기
        int c = 0X000000FF;
        //특정비트, 바이트의 내용만 걸러서 내리고 싶을때 &를 쓴다 (채로 밀가루 치듯이)
        int d = 0XABCD1234;
 
        
        //byte short int long 실행속도는 같다. 
        
        
        System.out.printf("%d %x",a,a);
        System.out.println();
        System.out.printf("%d %x",b,b);
        System.out.println();
        System.out.printf("%x",c);
        System.out.println();
        System.out.printf("%08x",a&0X00000FF0);//원하는 위치에 F를 두고 사용한다. 변수%00F00000f
        System.out.println();
        System.out.printf("%08x",d&0X000000FF);
        System.out.println();
        System.out.printf("%08x",d&0X000000FF);
        System.out.println();        
        
        //1010 1011 1100 1101 0001 0010 0011 0100
        //0101 0101 1110 0110 1000 1001 0001 1010    55 e6 89 1a    
        int e = 0XABCD1234;
        System.out.printf("%08x",e>>>1 );//1비트 쉬프트연산
        System.out.println();
        int f = 0XABCD1234;
        
        
        
        //1010 1011 1100 1101 0001 0010 0011 0100
        //0000 0101 0101 1110 0110 1000 1001 0001     05 5e 68 91
        System.out.printf("%08x",f>>>5 );//5비트자리이동
        
        System.out.println();
        int g = 0XABCD1234;
        System.out.printf("%08x",g<<4);//4비트 자리이동 왼쪽으로 한칸 민다.
        
        System.out.println();
        int h = 0XABCD1234;
        System.out.printf("%08x",g<<4);//4비트 자리이동 왼쪽으로 한칸 민다.
        System.out.println();
        int h1 = (h&0XFF000000);//ab만 뺴겟다
        System.out.println();
        System.out.printf("%08d",h1>>>24);
        
        int h2 = (h&0X00FF0000);//ab만 뺴겟다
        System.out.println();
        System.out.printf("%08d",h2>>>16);
        
        int h3 = (h&0X0000FF00);//ab만 뺴겟다
        System.out.println();
        System.out.printf("%08x",h3>>>8);
        
        int h4 = (h&0X000000FF);//ab만 뺴겟다
        System.out.println();
        System.out.printf("%08x",h4>>>0);
        //캐스퍼 블랜딩,알파 블랜딩
        //쉬프트 연산 왼쪽으로 하나씩 밀면
        //그 값의 두배가 된다. -> 2의 2승은 2곱함 3승은 3곱함
        
        int a = 23*800;
        int b = (23<<9)+(23<<8)+(23<<5);
    }
}
 
cs




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
package Pack01;
import java.util.LinkedList;
import java.util.Random;
import java.util.Scanner;
import java.util.concurrent.SynchronousQueue;
import java.nio.channels.NetworkChannel;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
public class Hello {
    
    public static void main(String[] args) {
        
        int n = 23;
        int a = n*800;
        int b = (n<<9)+(n<<8)+(n<<5);
        System.out.println(a);
        System.out.println(b);
        
        //b코드는 가독성이 떨어진다. 속도는 빠르나 800번 더한것과 몇번 안더하는것의 차이
        int c = 0X12345678;//16진수
        int d = 0X12345678;
        
        System.out.printf("%08x\n",d|0X00FF00FF);
        //1로 표시할떄 비트 |
        int e = 0X12345678;
        int f = e|0X00010000;//17번째
        System.out.printf("%08x\n",f|e);
        int g1 = 0X00000034;
        int g2 = 0X00005600;
        int g3 = 0X00780000;
        int g4 = g1+g2+g3;
        
        int g5 = g1|g2|g3;//g4와g5는 같다 |연산이 더빠르다
        System.out.printf("%08x\n",g4);
        System.out.printf("%08x\n",g5);
        
        int h1 = 0X0C;//1100
        int h2 = 0X0A;//1010
        int h3 = h1^h2;//익스크루시브 or//같은놈이만나면 0 다른놈이만나면 1 배타적 논리 or
        //0110
        
        System.out.printf("%08x\n",h3);
        
        int h4 = 0X1234;//0001 0010 0011 0100
        
        
        int h5 = h4^0XFFFF;// 1110 1101 1100 1011   
        System.out.printf("%08x\n",h5);
        
        
        
        
    }
}
 
cs




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package Pack01;
import java.util.LinkedList;
import java.util.Random;
import java.util.Scanner;
import java.util.concurrent.SynchronousQueue;
import java.nio.channels.NetworkChannel;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
public class Hello {
    
    public static void main(String[] args) {
        
        Random rn = new Random();
        for (int i = 0; i < 8; i++) {
            System.out.println(rn.nextInt(10));
        }
        System.out.println();
        for (int i = 0; i < 8; i++) {
            double n = Math.random();//0.0~1.0까지
            System.out.println(n);
        }
        int num = (int)(Math.random()*-6);//타입 캐스팅
        System.out.println();
        System.out.println(num);
        //stack메모리는 지역변수 메모리들 
        //heap는 new 동적메모리 
        //stack = FILO = 먼저들어간놈은 먼저나온다.
        
    }
}
 
cs




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package Pack01;
import java.util.LinkedList;
import java.util.Random;
import java.util.Scanner;
import java.util.concurrent.SynchronousQueue;
import java.nio.channels.NetworkChannel;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
public class Hello {
    
    public static void main(String[] args) {
        
        //int a = 4/0;
        //ArithmeticException: 수학 예외
        //Exception이 발생하면 프로그램은 강제종료가 되는것처럼 보인다.
        
        
        
        /*int []ar = new int[10];
        ar[10] = 100;*/
        //배열 경계를 넘어서서 쓴것.
        
        
        try {//try에 넣어준다.  //예외가 발생하면 catch로 가라            
            int a = 4/0;
        } catch (Exception e) {
            // TODO: handle exception
            System.out.println("앵무새");
            e.printStackTrace();//오류 보기
        }
        //catch가고 프로그램을 계속 진행해라
        
        System.out.println("호랑이");
        /*String s=null;
        s.toString();*/
        //객체가 안에없는데 왜쓰나요
        
        
    }
}
 
cs


728x90

'비트 단기 > java' 카테고리의 다른 글

다형성 이어서 추상클래스  (0) 2018.12.06
java 다형성  (0) 2018.12.05
java LInkedList 후~  (0) 2018.12.04
java 41번  (0) 2018.12.03
24~ 31  (0) 2018.11.29

댓글