숫자연산과 진법, 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());
여기서는 스트링버퍼를 사용하였다
스트링버퍼의 인덱스를 연산하여 그 곳에 해당하는 인덱스에 공백을 넣으라고 했다.
'Programming Language > JAVA' 카테고리의 다른 글
이너클래스에서 아우터클래스 Field 부르기 (0) | 2019.07.18 |
---|---|
DESIGN-PATTERN :: Singleton Pattern 싱글톤 패턴 (0) | 2019.07.17 |
Lambda Expressions 람다식 (0) | 2019.07.17 |
상속과 추상함수, 인터페이스의 활용 (1) | 2019.07.16 |
삼항연산자의 활용 (0) | 2019.07.11 |
사이트의 정보
코딩하렴
으렴