--*p : 단항 연산자는 연산 결합 순서가 오른쪽부터 시작된다. 그러므로 *p가 먼저 해석 되고 -- 연산이 되므로 *p값이 1줄어든 4로 출력된다.






*p-- : 단항 연산자는 연산 결합 순서가 오른쪽부터 시작한다. 그러므로 p--가 먼저 해석 되기 때문에 p값 자체가 줄어든다.

연산자 우선순위 및 결합순서
 컴퓨터언어는 개발자를 비롯한 컴퓨터 과학/공학자들의 요구에 따라 다양하게 진화되었다. 최대한 인간의 일반적인 사고를 바탕에 두고 문법과 체계를 만든 것이지만, 아무래도 언어 개발자들의 마인드가 포함되어 있어 일반에게는 약간 어렵기도 한 것 같다. 다음은 C++ 연산자 우선순위표이다. 이것을 잘 알아야, 복잡한 포인터와 구조체, 배열이 섞인 복잡해 보이는 식도 기계적으로 풀어낼 수 있다. 그러므로 다음은 반드시 암기 가능하면 이해할 사항이다.

간략본(http://www.winapi.co.kr/clec/cpp1/5-4-1.htm)

순위

연산자

결합순서

1

( ) [ ] -> .

왼쪽 우선

2

! ~ ++ -- + -(부호) *(포인터) & sizeof 캐스트

오른쪽 우선

3

*(곱셈) / %

왼쪽 우선

4

+ -(덧셈, 뺄셈)

왼쪽 우선

5

<< >>

왼쪽 우선

6

< <= > >=

왼쪽 우선

7

== !=

왼쪽 우선

8

&

왼쪽 우선

9

^

왼쪽 우선

10

|

왼쪽 우선

11

&&

왼쪽 우선

12

||

왼쪽 우선

13

? :

오른쪽 우선

14

= 복합대입

오른쪽 우선

15

,

왼쪽 우선


상세본(http://www.cppreference.com/operator_precedence.html)
사용자 삽입 이미지

자바(http://www.tech-faq.com/lang/ko/java-operator-precedence.shtml)
자바 연산자 우선순위는 자바를 결정하는 방법을 평가 연산자를 사용하여 첫 번째합니다.

In this chart, operator precedence is displayed from highest precedence to lowest precedence. 이 차트, 연산자를 우선 순위가 높은 우선 순위가 낮은 우선순위를 표시합니다.

우선순위 연산자 기능 결합순서
1 [] Array index 어레이 색인 Left to Right
() Method call 메서드 호출
. Member access 회원에 액세스
2 ++ Prefix or postfix increment 접두사 또는 postfix 증감 Right to Left
-- Prefix or postfix decrement 접두사 또는 postfix 감소
+ - Unary plus, minus 단항 플러스, 마이너스
~ Bitwise NOT 비트없는
! Boolean (logical) NOT 부울 (논리)
(type) Type cast 유형 캐스트
new Object creation 개체를 창출
3 * / % Multiplication, division, remainder 곱셈, 부서, 나머지 Left to Right
4 + - Addition, subtraction 또한 뺄셈 Left to Right
+ String concatenation 문자열 연결
5 << Signed bit shift left to right 서명 비트 교대 왼쪽에서 오른쪽으로 Left to Right
>> Signed bit shift right to left 서명 비트 교대 오른쪽에서 왼쪽으로
>>> Unsigned bit shift right to left 오른쪽에서 왼쪽으로 서명되지 않은 비트 교대
6 < <= Less than, less than or equal to 미만, 이하 같음 Left to Right
> >= Greater than, greater than or equal to 보다 큼, 크거나 같음
instanceof Reference test 참조 테스트
7 == Equal to 같음 Left to Right
!= Not equal to 같지 않음
8 & Bitwise AND 비트 및 Left to Right
&& Boolean (logical) AND 부울 (논리)과
9 ^ Bitwise XOR 비트 xor Left to Right
^ Boolean (logical) XOR 부울 (논리) xor
10 | Bitwise OR 비트 또는 Left to Right
| Boolean (logical) OR 부울 (논리) 또는
11 && Boolean (logical) AND 부울 (논리)과 Left to Right
12 || Boolean (logical) OR 부울 (논리) 또는 Left to Right
13 ? : Conditional 조건부 Right to Left
14 = Assignment 과제 Right to Left
*= /= += -= %=
<<= >>= >>>=
&= ^= |= 
Combinated assignment 임무는 combinated
(operation and assignment) (작업과 배정)

Notes: 참고 사항 :

  • Expressions inside parentheses are evaluated first 괄호 안에 표현을 평가할 수있습니다 첫 번째
  • Nested parentheses are evaluated from the innermost parentheses to the outermost parenthesis. 중첩된 괄호는 괄호를 안쪽에서 바깥쪽 괄호을 평가합니다.
  • Operators in the same row in the chart have equal precedence. 차트에서와 같은 행에 연산자를 우선 순위가 동일합니다.

참고
- 이쪽 블로그를 보면 연산자 우선 순위에 대한 여러 생각들을 정리해 놓았다

출 처 : http://learder.tistory.com/827019


final

변수에 사용시 : 상수로 만든다

함수에 사용시 : overriding 금지

클래스 사용시 : 상속 금지
ctrl + shift + o : 자동 import
shift + f2 : 레퍼런스 문서
ctrl + space : 코드 자동 완성
ctrl + / : 블럭 지정한 영역 주석처리
ctrl + i : 소스 정렬
ctrl + shift + f : 소스 정렬
alt + shift + s + v : 소스 오버라이딩


1. 자기 자신의 클래스와

2. 같은 패키지 내의 클래스와

3. 그 클래스를 상속받는 클래스

모두에서 접근이 가능하다.

c++에서는 자기 자신의 클래스와 자식 클래스의 멤버 함수로부터의 접근만 허용한다.

void quick_sort(int *data, int left, int right)
{
  int k;
  int i, j, pivot;
  i = left;
  j = right;
  pivot = left;

  if(i >= j)
    return;

  while(i < j)
  {
    while(data[++i] < data[pivot])
    {
      if(i >= right)
        break;
    }
    while(data[j] > data[pivot])
    {
      j--;
      if(j <= left)
        break;
    }
    if(i < j)
      swap(data, i, j);
  }
  swap(data, pivot, j);
  quick_sort(data, left, j - 1);
  quick_sort(data, j + 1, right);
}

void swap(int *data, int i, int j)
{
  int tmp;

  tmp = data[i];
  data[i] = data[j];
  data[j] = tmp;
}

// 버블 정렬
void bubble(int *arr, int size)
{
  int i, j;
  int tmp;

  for(i = 0 ; i < size - 1 ; i++)
  {
    for(j = 0 ; j < size - i - 1 ; j++)
    {
      if(arr[j] > arr[j + 1])
      {
        tmp = arr[j];
        arr[j] = arr[j + 1];
        arr[j + 1= tmp;
      }
    }
  }
}

 1.
import java.util.*;

public class Test {

  /**
   * @param args
   */

  public static void main(String[] args) {
    // TODO Auto-generated method stub
    int com, eng, math, java;
    Scanner input = new Scanner(System.in);
    System.out.print("점수 : ");
    com = input.nextInt();
    eng = input.nextInt();
    math = input.nextInt();
    java = input.nextInt();
    
    int sum = com + eng + math + java;
    double avg = (double)sum / 4;
    System.out.println("총점 : " + sum);
    System.out.println("평균 : " + avg);
  }
}


 2.
import java.util.*;

public class Test {

  /**
   * @param args
   */

  public static void main(String[] args) {
    // TODO Auto-generated method stub
    Scanner input = new Scanner(System.in);
    System.out.print("정수값 : ");
    int num = input.nextInt();
    
    System.out.println("제곱 : " + (num * num));
    System.out.println("세제곱 : " + (num * num * num));
  }
}


 3.
public class Test {

  /**
   * @param args
   */

  public static void main(String[] args) {
    // TODO Auto-generated method stub
    int pay = 10000;
    int price = 3500;
    int extra = (int)(price * 0.1);
    int cnt = 2;
    int total = (price + extra) * 2;
    
    System.out.println("지불한 돈 : " + pay);
    System.out.println("까페 모카 단가 : " + price);
    System.out.println("수량 : " + cnt);
    System.out.println("부가세 : " + extra);
    System.out.println("상품 총액 : " + total);
    System.out.println("거스름돈 : " + (pay - total));
  }
}


 4.
import java.util.*;

public class Test {

  /**
   * @param args
   */

  public static void main(String[] args) {
    // TODO Auto-generated method stub
    Scanner input = new Scanner(System.in);
    System.out.print("정수값 : ");
    int num = input.nextInt();
    
    System.out.println("천의 자리 : " + (num / 1000));
    num %= 1000;
    System.out.println("백의 자리 : " + (num / 100));
    num %= 100;
    System.out.println("십의 자리 : " + (num / 10));
    num %= 10;
    System.out.println("일의 자리 : " + num);
  }
}


 5.
import java.util.*;

public class Test {

  /**
   * @param args
   */

  public static void main(String[] args) {
    // TODO Auto-generated method stub
    Scanner input = new Scanner(System.in);
    System.out.print("시간(초) : ");
    int sec = input.nextInt();
    int total = sec;
    int hour = sec / 3600;
    sec %= 3600;
    int min = sec / 60;
    sec %= 60;
    
    System.out.println(total + "초는 " + hour + "시간 " + min + "분 " + sec + "초이다.");
  }
}


 6.
public class Test {

  /**
   * @param args
   */

  public static void main(String[] args) {
    // TODO Auto-generated method stub
    System.out.println("\'A\'+1\t\'A\'+2\t\'A\'+3");
    System.out.println("---------------------------------------");
    System.out.println((char)('A'+1) + "\t" + (char)('A'+2) + "\t" + (char)('A'+3));
  }
}


 7.
public class Test {

  /**
   * @param args
   */

  public static void main(String[] args) {
    // TODO Auto-generated method stub
    double r = 5.0;
    double v = 3.14 * r * r;
    System.out.println("반지름 : " + r);
    System.out.println("부피 : " + v);
  }
}


 8.
public class Test {

  /**
   * @param args
   */

  public static void main(String[] args) {
    // TODO Auto-generated method stub
    double cm = 162.56;
    double inch = cm / 2.54;
    double pit = inch / 12;
    inch %= 12;
    
    System.out.println(cm + "cm는 " + (int)pit + "피트 " + (int)inch + "인치이다.");
  }
}


 9.
public class Test {

  /**
   * @param args
   */

  public static void main(String[] args) {
    // TODO Auto-generated method stub
    double pit = 5;
    double inch = 4;
    
    double tinch = pit * 12 + 4;
    double cm = tinch * 2.54;
    
    System.out.println((int)pit + "피트 " + (int)inch + "인치는 "+ cm +"cm");
  }
}


 1. jdk 설치
: http://java.sun.com 에서 Java SE 버젼을 설치 한다.

 2. eclipse 설치
: Eclipse IDE for Java EE Developers 이나 Eclipse Classic 버젼을 설치한다.(http://www.eclipse.org)

 3. Android ADT 설치(Android Eclipse 플러그인)
: 설치된 eclipse를 실행한다. [Help - Install New Software...]를 클릭한다.

다음과 같은 창이 뜰 것이다. 오른쪽 상단에 Add 버튼을 누르고 다음과 같이 입력한다.

https://dl-ssl.google.com/android/eclipse/


Developer Tools라는 항목이 생겼을 것이다. Developer Tools 항목을 클릭해 전체 선택하고 Next 버튼을 누르면 Eclipse가 이 소프트웨어를 다운받고 설치까지 자동으로 수행한다.

 4. Android SDK 설치
: http://developer.android.com 에서 Android SDK를 다운받는다. 다운 받은 SDK를 압축을 푼 후 적당한 디렉토리에 설치한다.(SDK 버전 2.0부터는 배포 용량이 너무 커져서 배포 파일에는 꼭 필요한 것들만 포함되어 있으며 더 필요한 부분은 온라인으로 다운받도록 변경되었다.)

ADT에게 SDK가 어디 있는지 위치를 설정한다. Eclipse [Window-Preference]를 클릭하고, 왼쪽 메뉴에서 Android를 선택한 후 SDK 폴더의 위치를 지정한다.

(현재 상태는 기본 SDK외에 추가로 SDK가 더 설치된 상태다. 문서 쓰는 시점이 다 설치한 후라...)

SDK의 위치를 지정했다면 다음은 추가로 더 필요한 SDK 요소들을 설치한다. [Window-Android SDK and AVR Manager]을 클릭한다. 왼쪽 메뉴에 Available Packages를 선택하면 설치 가능한 목록들이 나열되는데 필요한 버전을 설치하면 된다.

필요한 SDK를 선택한 후 [Install Selected]를 눌러 설치를 시작한다.

 5. AVD(Android Virtual Device) 생성
: 안드로이드 어플를 직접 돌려 볼 수 있는 안드로이드폰 에뮬레이터를 생성한다. Eclipse [Window-Android SDK and AVD Manager]를 클릭한 후 왼쪽 메뉴 Virtual Device 페이지를 선택한다. 새로운 AVD를 생성하기 위해 New 버튼을 누른 후 다음과 같이 입력한다.


AVD 생성 후 Start 버튼을 누르면 에뮬레이터가 실행 된다... 다음은 에뮬레이트가 실행된 화면이다.


 intToChar() - 정수를 문자열로 바꿔주는 함수
void intToChar(char *buf, int num)
{
  int i, j;
  int target;    // 각 자리수
  int value = 1;  // 숫자 크기 확인
  
  while(value <= num)
  {
    value *= 10;
  }  
  
  for(i = 0, j = value/10 ; j >= 10 ; j /= 10)
  {
    target = num / j;
    num = num % j;
    buf[i++] = target + 48;    // buf에 문자값 저장
  }
  buf[i++] = num + 48;
  buf[i] = '\0';
}

 atoi() - 문자열로 된 수를 정수형으로 바꿔주는 함수
int atoi(char *c)      // Charter to Integer
{
  int result = 0;
  int val = 1;
  int i;
  char *tmp = c;

  while(*tmp != '\0')
  {
    val *= 10;
    tmp++;
  }

  tmp = c;
  for(i = (val / 10) ; 1 <= i ; i /= 10)
  {
    result += ((*tmp - 48) * i);
    tmp++;
  }

  return result;
}

+ Recent posts