2012-03-02 4 views
-4

비트 단위 연산을 사용하여 주어진 숫자에 정적 단일 숫자를 추가하려고합니다.
비트 단위 연산을 사용하여 정수 값에 임의의 숫자 추가

If the number is 
2 => 12 
31 => 131 
24 => 124 
11 => 111 

그것을 할 수 있는가, 정적 숫자가 1하자 ..?
여기 비트 단위로 엄격한 이유는 정수 값으로 유지하려고합니다. 당신의 DBMS는 기본적인 수학 함수 (예를 들어 오라클)를 지원하는 경우

+0

죄송합니다. 제한 사항에 대해 더 자세히 설명해 주시겠습니까? 정수 산술로 이것을 계산할 수 있습니다. –

+0

예, 정수 산술도 사용할 수 있습니다 .... – Pavunkumar

+0

@pavun_cool 어떤 DBMS를 사용하고 있습니까? –

답변

1

, 당신은 사용할 수 있습니다

SELECT NUMBER + Power(10, Floor(Log(10, NUMBER)) + 1) 
FROM TABLE; 

이 같은 문자열 트릭 멀리 얻을 수없는 경우

SELECT TO_NUMBER('1' || TO_CHAR(NUMBER)) 
FROM TABLE; 

(사용하여 Oracle)

0

비트 연산자는 십진수 숫자에서 잘 작동하지 않습니다. 2의 제곱과 10의 제곱 수가 잘 맞지 않기 때문입니다. e 아니요 아이디어 데이터베이스 태그가 여기에 무엇입니까, 이것은 완전히 관련이없는 것 같습니다). 당신이 나타내는 것 같은 함수가 임의의 수의 왼쪽에 하나를 추가하려면

, 당신은 다음과 같은 알고리즘을 사용할 수 있습니다 : 예를 들어

def prefixWithOne (n): 
    if n == 0: 
     return 10 
    addNum = 1 
    testNum = n 
    while testNum > 0: 
     testNum = int (testNum/10) 
     addNum = addNum * 10 
    return addNum + n 

을, 다음과 같은 C 코드가 있다고 할 것입니다 :

unsigned int prefixWithOne (unsigned int n) { 
    unsigned int testNum = n; 
    unsigned int addNum = 1; 
    if (n == 0) return 10; 
    while (testNum > 0) { 
     testNum /= 10; 
     addNum *= 10; 
    } 
    return addNum + n; 
} 

(오버플로를주의해야한다는 일반적인주의 사항과 함께).

관련 문제