코딩하렴

숫자연산과 진법, String연산

by 으렴

선언을 해준다. 연산을 할 것이다.

	short a = 3, b = 1;
	int c = 2;

 

이렇게 더하자

	b = a + c;

근디 에러

주는놈이고 받는 놈이고 타입이 같아야한다.

	b = a + (short)c;

이것도 에러

 

5칙연산이 일어나는 그 순간 최종 연산을 int로 받아들이기때문에 중간에 해도 안된다.

다형성을 제외하고 대입연산자는 받는놈이고 주는놈이고 타입이 같아야한다.

5칙연산이 일어나는 그순간 최종연산을 int로 받아들이기때문에 중간에 하면 안된다.

주는 놈이 받는 놈 입장으로 생각해서 전달해주어야 한다.

 

	b = (short)(a + c);

이렇게 하면 안에러

 

long a = 10;	//4byte이상 일 경우 가장 큰 타입을 쓰고있는 long이 되어버린다. 
int b = 1; 

 

이 경우

b = (int)a +b;

이렇게해야 된다

4byte이상일 경우에는 자동으로 가장 큰 타입인 long으로 계산되어진다.

 

 

System.out.println(Integer.MAX_VALUE);
System.out.println(Integer.toHexString(1234));//10진수를 16진수로 만들어준다.
System.out.println(Integer.toHexString(Integer.MAX_VALUE));

integer에서 가장 높은 값을 16진수로 표현하면

 

2147483647 
4d2 
7fffffff

요래 나온다.

최상위비트가 0이되었으니 7이고 최상위는 fffffff

 

int a = 0386;//이거 왜안돼? 숫자앞에 0이 붙으면 8진수로 해석을한다. 8은 0~7까지기 때문에 8이들어가면 안대
int c = 0376; //이건 에러아냐
int b = 00037;//이건 왜 에러가 아니지?

 

 

 

과제가 나왔다.

class Apple {
	static void func03(int num) {			//넹ㅇㅂㅇ
		//logic
	}
}

public class Test01 {

	public static void main(String[] args) {
		Apple.func03(0x3c94ab78);			//16진수를 2진수로바꿔줘!
    }

저 func03의 로직을 완성해야한다.

1. 16진수를 2진수로 바꾸어 출력해라

2. 16진수를 보기쉽도록 4문자 단위로 잘라서 표현해라 ex. 0011 1010 1011 1000

 

두가지의 제약조건이다.

처음에 좀 어렵게 생각햇다.

 

String intet = Integer.toBinaryString(num);
char[] temp = intet.toCharArray();
String[] result = new String[(temp.length / 4) + 1];
Arrays.fill(result, "");
char zero = 48;				//아스키코드

int cnt = 0;

int cnt = 0;
for (int i = 0; i < result.length; i++) {
	for (int j = 0; j < 4; ++j) {
		if ((temp.length % 4 == 0) || i == 0 && j < (temp.length) % 4) {
			result[0] += String.valueOf(zero);
		} else {
			result[i] += temp[cnt];
			++cnt;
		}
	}
	result[i] += "\t";
}

System.out.println(Integer.toHexString(num));
for (int i = 0; i < result.length; i++) {
	System.out.print(result[i]);
}

이렇게하면

3c94ab78
0011	1100	1001	0100	1010	1011	0111	1000	

요래요래 나오긴한다.

근데 뭔가 복잡하다..

 

아무리봐도 짱구를 너무 많이 굴린 것 같다.

다른 방법으로 짜보려고한다.

		String temp1 = Integer.toBinaryString(num);
		System.out.println(temp1);
		int rest = 4-(temp1.length()%4);
		//System.out.println(rest);
		char[] forword = new char[rest];
		for (int i = 0; i < forword.length; ++i) {
			forword[i]='0';
		}
		String temp2 = new String(forword);

		StringBuffer result = new StringBuffer(temp2+temp1);
		int rest2 = (temp1.length()/4 ==0)? 0:1;
		for(int i = 0; i <(temp1.length()/4)+rest2;++i) {
			//s4.insert((4*i)+i, ' ');
			result.insert((((temp1.length()/4)+1)-i)*4, ' ');
		}
		System.out.println(result+"/"+result.length());

여기서는 스트링버퍼를 사용하였다

스트링버퍼의 인덱스를 연산하여 그 곳에 해당하는 인덱스에 공백을 넣으라고 했다.

사이트의 정보

코딩하렴

으렴

활동하기