2012-03-02 13 views
-4

ビット単位の演算を使用して、任意の数のスタティックな1桁を追加したいとします。
ビット単位の演算を使用して整数値の任意の数字を付加する

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

それを行うことが可能であり、静的な数は1であるしましょうか..?
ここで私はビット単位で厳密な意味を持っているので、整数値として維持したいと思います。

+0

申し訳ありませんが、あなたの制限をよりよく説明できますか?整数演算でこれを計算できます。 –

+0

はい、整数演算もOK ... – Pavunkumar

+0

@pavun_coolどのDBMSを使用していますか? –

答えて

1

あなたのDBMSが、基本的な数学関数(インスタンスのOracleを)サポートしている場合は、使用することができます:

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

を使用すると、文字列のトリックなどで逃げることができない場合:Oracleを使用して

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

( )

0

小数点以下はで、ビット演算子はうまくいきません。2のべき乗と10のべき乗がうまく網羅されないからです。 e noアイデアデータベースタグはここにありますが、これはまったく無関係なようです)。

あなたが示しているように見えるとして、任意の数の左に1を追加するための機能が必要な場合は、次のアルゴリズムを使用することができます:たとえば

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; 
} 

(オーバーフローを監視するための通常の警告が付いています)。

関連する問題