2017-01-16 25 views
0

次のCコードのバージョン2をRで再現したいと考えています 問題は、RにはCの '(unsigned int)'と同等の操作がないようです。 (Rには符号なし整数はありません) 。いくつかのパッケージを調べましたが、簡単には 見つけられませんでした。手動で(または関数を使用して)変換を行うには、.Machine$integer.max + 1程度を追加する必要がありますか? ...(それはおそらく、Cのコードを再現するために、その後、64ビットで必要です)Rで '(unsigned int)'演算を得るには?

#include <stdio.h> 
#include <stdint.h> 

int II1 = -1; 
int II2 = -2; 
int_least64_t a = 1403580; 
int_least64_t b = 810728; 

int main() 
{ 
    int_least64_t p; 
    /* Version 1 */ 
    p = a * II2 - b * II1; 
     printf("%lld\n", (int_least64_t)(p)); /* -1996432 */ 
    /* Version 2 */ 
    p = a * (unsigned int)II2 - b * (unsigned int)II1; 
    printf("%lld\n", (int_least64_t)(p)); /* 2546279949371760 */ 
    return 0; 
} 

これはRにバージョン1を再生する(代わりに64のおそらく32ビット):

II1 <- -1 
II2 <- -2 
a <- 1403580 
b <- 810728 
a * II2 - b * II1 
+0

この[SO Post](http://stackoverflow.com/questions/14395421/unsigned-int-in-c-function)を参考にしてください。 – G5W

+0

私は実際にその投稿を見ましたが、それは役に立ちませんでした。 Cから値を返す必要はありません。私はCを複製したいと思います。 –

+0

私はint64パッケージのuint64への参照を意味していました。それは良いことではなかった? – G5W

答えて

1
# from bmp:::ConvertIntToUInt() 

int_to_unit <- function (x, adjustment=2^32) { 
    x <- as.numeric(x) 
    signs <- sign(x) 
    x[signs < 0] <- x[signs < 0] + adjustment 
    x 
} 

II1 <- -1L 
II2 <- -2L 
a <- 1403580L 
b <- 810728L 

(p <- a * II2 - b * II1) 
## [1] -1996432 

(p <- a * int_to_uint(II2) - b * int_to_uint(II1)) 
## [1] 2546279949371760 

整数を取り戻すつもりはないことに注意してください。結局、これはRです。あなたはビットシフト値にするつもりがないなら、物事はうまくいくはずです。

関連する問題