숫자연산과 진법, 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());
여기서는 스트링버퍼를 사용하였다
스트링버퍼의 인덱스를 연산하여 그 곳에 해당하는 인덱스에 공백을 넣으라고 했다.
사이트의 정보
코딩하렴
으렴