#!/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”?
答案 0 :(得分:5)
int a
可能使用32位表示。如果要表示高于4,294,967,296 / 2的值,则应使用unsigned int
。
答案 1 :(得分:5)
Perl支持有符号和无符号整数,并且它的运算符将在它们之间很好地切换,但是您明确地请求IV(带符号的int类型SV)。请改用newSVuv。如果整数是32位但是perl使用64位整数,你还需要说UV a =
或unsigned a =
而不是int,否则由newSVuv执行的强制转换将最终扩展符号位通过高32位。