如何获得'(unsigned int)'在R?

时间:2017-01-16 22:29:22

标签: r 64-bit unsigned-integer

我想在R中重现以下C代码的第2版。 问题是R似乎没有一个等同于C'(unsigned int)''(unsigned int)' (R中没有无符号整数)。我看了一些包裹,但不是很容易 找到它。要手动(或使用函数)进行转换,是否需要添加.Machine$integer.max + 1左右? (但是64位可能需要重现C代码)...

#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(可能也是32位而不是64位):

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

1 个答案:

答案 0 :(得分:2)

# 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.如果你不打算改变价值观,情况就会好转。