如何在 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 价值观,事情应该没问题。
我想在 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 价值观,事情应该没问题。