[JAVA] CodeUp1028 - Unsigned

정상희·2022년 10월 6일
0

PS

목록 보기
4/8

Unsigned란?

음수값을 가지지 않을 경우 적은 바이트 수만을 허용하여 그 2배에 해당하는 양의 범위를 갖는다.

첫 번째 코드 작성

  • java에선 unsigned를 다루지 않았다.
  • 정수형의 양의 범위를 두 배로 넓여야 하니 long형으로 바꾸는 메소드를 작성했다.
  • unsigned long을 만드는 메소드
import java.util.Scanner;

public class CodeUp1028 {
    
    // unsigned long 사용하기
    public long unsigned(int num) {
        return num & 0xffffffffL;
    }
    public static void main(String[] args) {
        CodeUp1028 T = new CodeUp1028();
        
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();
        System.out.println(T.unsigned(num));
    }
}

메소드 설명

  • 특정 바이트(4bit)에 비트연산 &(And) 0xff를 했을 경우 unsigned형태로 자료범위가 0~ 255가 된다.
  • 위의 코드의 경우 4byte(32bit)의 unsigned형태로 만드려고하니 num & 0xffffffffL 으로 연산했다.
    - 리터럴 뒤에 붙은 L은 Long 데이터 타입임을 알려주는 접미사다.
    - Long형의 접미사는 반드시 붙여야한다

에러 발생
첫번째 코드를 그대로 실행하면 아래처럼 int정수에 들어갈수 있는 범위를 초과한 값을 넣었다고 알려준다


두 번째 풀이

  • long형으로 입력받고 unsigned int로 바꾸는 것이 목표
import java.util.Scanner;

public class CodeUp1028 {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        long num = sc.nextLong();
        int i = (int)num;
//        System.out.println(i);
        System.out.println(Integer.toUnsignedString(i));
    }
}
/*
input : 2147483648
output : 2147483648
 */

profile
기록중

0개의 댓글

관련 채용 정보