📄 16___subtract.t
字号:
#!perl -wuse strict;no strict "vars";use Bit::Vector;# ======================================================================# $carry_out = $vector1->subtract($vector2,$vector3,$carry_in);# ======================================================================print "1..1001\n";$n = 1;$result0{'FE'}{'FE'} = '00'; $carry0{'FE'}{'FE'} = 0;$result0{'FE'}{'FF'} = 'FF'; $carry0{'FE'}{'FF'} = 1;$result0{'FE'}{'00'} = 'FE'; $carry0{'FE'}{'00'} = 0;$result0{'FE'}{'01'} = 'FD'; $carry0{'FE'}{'01'} = 0;$result0{'FE'}{'02'} = 'FC'; $carry0{'FE'}{'02'} = 0;$result0{'FF'}{'FE'} = '01'; $carry0{'FF'}{'FE'} = 0;$result0{'FF'}{'FF'} = '00'; $carry0{'FF'}{'FF'} = 0;$result0{'FF'}{'00'} = 'FF'; $carry0{'FF'}{'00'} = 0;$result0{'FF'}{'01'} = 'FE'; $carry0{'FF'}{'01'} = 0;$result0{'FF'}{'02'} = 'FD'; $carry0{'FF'}{'02'} = 0;$result0{'00'}{'FE'} = '02'; $carry0{'00'}{'FE'} = 1;$result0{'00'}{'FF'} = '01'; $carry0{'00'}{'FF'} = 1;$result0{'00'}{'00'} = '00'; $carry0{'00'}{'00'} = 0;$result0{'00'}{'01'} = 'FF'; $carry0{'00'}{'01'} = 1;$result0{'00'}{'02'} = 'FE'; $carry0{'00'}{'02'} = 1;$result0{'01'}{'FE'} = '03'; $carry0{'01'}{'FE'} = 1;$result0{'01'}{'FF'} = '02'; $carry0{'01'}{'FF'} = 1;$result0{'01'}{'00'} = '01'; $carry0{'01'}{'00'} = 0;$result0{'01'}{'01'} = '00'; $carry0{'01'}{'01'} = 0;$result0{'01'}{'02'} = 'FF'; $carry0{'01'}{'02'} = 1;$result0{'02'}{'FE'} = '04'; $carry0{'02'}{'FE'} = 1;$result0{'02'}{'FF'} = '03'; $carry0{'02'}{'FF'} = 1;$result0{'02'}{'00'} = '02'; $carry0{'02'}{'00'} = 0;$result0{'02'}{'01'} = '01'; $carry0{'02'}{'01'} = 0;$result0{'02'}{'02'} = '00'; $carry0{'02'}{'02'} = 0;$result1{'FE'}{'FE'} = 'FF'; $carry1{'FE'}{'FE'} = 1;$result1{'FE'}{'FF'} = 'FE'; $carry1{'FE'}{'FF'} = 1;$result1{'FE'}{'00'} = 'FD'; $carry1{'FE'}{'00'} = 0;$result1{'FE'}{'01'} = 'FC'; $carry1{'FE'}{'01'} = 0;$result1{'FE'}{'02'} = 'FB'; $carry1{'FE'}{'02'} = 0;$result1{'FF'}{'FE'} = '00'; $carry1{'FF'}{'FE'} = 0;$result1{'FF'}{'FF'} = 'FF'; $carry1{'FF'}{'FF'} = 1;$result1{'FF'}{'00'} = 'FE'; $carry1{'FF'}{'00'} = 0;$result1{'FF'}{'01'} = 'FD'; $carry1{'FF'}{'01'} = 0;$result1{'FF'}{'02'} = 'FC'; $carry1{'FF'}{'02'} = 0;$result1{'00'}{'FE'} = '01'; $carry1{'00'}{'FE'} = 1;$result1{'00'}{'FF'} = '00'; $carry1{'00'}{'FF'} = 1;$result1{'00'}{'00'} = 'FF'; $carry1{'00'}{'00'} = 1;$result1{'00'}{'01'} = 'FE'; $carry1{'00'}{'01'} = 1;$result1{'00'}{'02'} = 'FD'; $carry1{'00'}{'02'} = 1;$result1{'01'}{'FE'} = '02'; $carry1{'01'}{'FE'} = 1;$result1{'01'}{'FF'} = '01'; $carry1{'01'}{'FF'} = 1;$result1{'01'}{'00'} = '00'; $carry1{'01'}{'00'} = 0;$result1{'01'}{'01'} = 'FF'; $carry1{'01'}{'01'} = 1;$result1{'01'}{'02'} = 'FE'; $carry1{'01'}{'02'} = 1;$result1{'02'}{'FE'} = '03'; $carry1{'02'}{'FE'} = 1;$result1{'02'}{'FF'} = '02'; $carry1{'02'}{'FF'} = 1;$result1{'02'}{'00'} = '01'; $carry1{'02'}{'00'} = 0;$result1{'02'}{'01'} = '00'; $carry1{'02'}{'01'} = 0;$result1{'02'}{'02'} = 'FF'; $carry1{'02'}{'02'} = 1;foreach $bits (31, 32, 33, 63, 64, 65, 127, 128, 129, 997){ $vec0 = Bit::Vector->new($bits); $vec1 = Bit::Vector->new($bits); $vec2 = Bit::Vector->new($bits); $vec3 = Bit::Vector->new($bits); foreach $arg1 (sort hexadecimal (keys %result0)) { foreach $arg2 (sort hexadecimal (keys %{$result0{$arg1}})) {# print "subtract '$arg1' - '$arg2'\n"; $vec1->from_Hex(convert($arg1)); $vec2->from_Hex(convert($arg2)); $vec3->from_Hex(convert($result0{$arg1}{$arg2})); $carry3 = $carry0{$arg1}{$arg2}; $carry0 = $vec0->subtract($vec1,$vec2,0);# print "Result: '", $vec0->to_Hex(), "' $carry0\n";# print "Should be: '", $vec3->to_Hex(), "' $carry3\n"; if ($vec0->equal($vec3)) {print "ok $n\n";} else {print "not ok $n\n";} $n++; if ($carry0 == $carry3) {print "ok $n\n";} else {print "not ok $n\n";} $n++; } } foreach $arg1 (sort hexadecimal (keys %result0)) { foreach $arg2 (sort hexadecimal (keys %{$result0{$arg1}})) {# print "subtract '$arg1' - '$arg2' - 1\n"; $vec1->from_Hex(convert($arg1)); $vec2->from_Hex(convert($arg2)); $vec3->from_Hex(convert($result1{$arg1}{$arg2})); $carry3 = $carry1{$arg1}{$arg2}; $carry0 = $vec0->subtract($vec1,$vec2,1);# print "Result: '", $vec0->to_Hex(), "' $carry0\n";# print "Should be: '", $vec3->to_Hex(), "' $carry3\n"; if ($vec0->equal($vec3)) {print "ok $n\n";} else {print "not ok $n\n";} $n++; if ($carry0 == $carry3) {print "ok $n\n";} else {print "not ok $n\n";} $n++; } }}$vec = Bit::Vector->new(1024);$vec->subtract($vec,$vec,5);if ($vec->is_full()){print "ok $n\n";} else {print "not ok $n\n";}$n++;exit;sub hexadecimal{ my($x,$y) = (hex($a),hex($b)); if ($x > 127) { $x -= 256; } if ($y > 127) { $y -= 256; } return( $x <=> $y );}sub convert{ my($hex) = shift; my($dec) = hex($hex); my($len); $len = int($bits / 4); if ($len * 4 < $bits) { $len++; } $len -= 2; if ($dec > 127) { return( ('F' x $len) . $hex ); } else { return( ('0' x $len) . $hex ); }}__END__
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -