一元NOT / Integersize架构
从“掌握Perl /第16章/位操作符/一元NOT,〜”:
一元NOT运算符(有时称为补码运算符)〜,基于体系结构的整数大小返回值的按位否定或1的补码
为什么以下脚本输出两个不同的值?
#!/usr/local/bin/perl
use warnings;
use 5.012;
use Config;
my $int_size = $Config{intsize} * 8;
my $value = 0b1111_1111;
my $complement = ~ $value;
say length sprintf "%${int_size}b", $value;
say length sprintf "%${int_size}b", $complement;
输出:
32
64
没有找到相关结果
已邀请:
2 个回复
貉骂
的输出。 使用
,可以看出
是无符号整数,而
不是。这篇文档表明无符号整数至少为32位,但与平台有关。我只能假设它们的意思是“取决于本地C编译器所谓的'long'而不是int,因为大多数编译器(包括GCC)在64位架构上使用32位整数。
目浆搽
(或uvsize;两者应该是相同的)来查看它有多长(或ivtype / uvtype来查看C类型是什么)。 如果您看到两个长度之间存在差异,则intsize为4,但ivsize为8.您使用的格式为
,其最小输出宽度为32; $ value仅使用8个字符,因此填充为32,但$ complement使用64个字符。