如何在 R 中获取“(unsigned int)”操作?

How to get '(unsigned int)' operation in R?

我想在 R 中重现以下 C 代码的版本 2。 问题是 R 似乎没有等同于 C 的“(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
# 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。如果你不打算成为 bit-shifting 价值观,事情应该没问题。