#!/usr/bin/env perl
use warnings;
use 5.012;
use Inline 'C';
my $value = test();
say $value;
__END__
__C__
void test() {
int a = 4294967294;
Inline_Stack_Vars;
Inline_Stack_Reset;
Inline_Stack_Push( sv_2mortal( newSViv( a ) ) );
Inline_Stack_Done;
}输出:
-2为什么我会在这里得到"-2“的输出?
发布于 2011-02-27 19:58:50
int a可能使用32位表示法。如果要表示大于4,294,967,296/2的值,则应使用unsigned int。
发布于 2011-02-28 06:41:09
Perl同时支持带符号整数和无符号整数,并且它的运算符可以很好地在它们之间切换,但是您显式地请求一个IV (带符号整数类型SV)。请改用newSVuv。如果int是32位,而perl使用64位整数,您还需要指定UV a =或unsigned a =而不是int,否则newSVuv对UV的强制转换将最终通过高32位扩展符号位。
https://stackoverflow.com/questions/5133012
复制相似问题