假设输入小于intmax('uint64'),如示例所示,这是一个不需要符号数学工具箱的解决方案。这支持两个输入参数,匹配dec2bin,是矢量化的,应该更快:
function s=int2bin(d,n)
%INT2BIN Convert nonnegative integer to a binary string
if isempty(d)
s = '';
return;
end
d = d(:);
if ~isinteger(d) || any(d < 0)
error('int2bin:InvalidIntegerInput',...
'First input must be a nonnegative integer class array.');
end
if nargin < 2
n = 1
else
n = round(double(n));
end
m = double(nextpow2(max(d)));
s = [repmat('0',length(d),n-m) rem(bsxfun(@bitshift,d,1-m:0),2)+'0'];
如果您不介意性能降低一点并且更喜欢单行匿名函数,请尝试:
int2bin = @(d,n)char(rem(bsxfun(@bitshift,d(:),1-max(n,double(nextpow2(max(d(:))))):0),2)+'0');
或者这个使用bitand而不是bitshift:
int2bin = @(d,n)char(~~bsxfun(@bitand,d(:),2.^(max(n,nextpow2(max(d(:)))):-1:0))+'0');
以上所有版本都假定d 是一个非负的integer class 变量,例如uint64(13339262925365424727),而n 是一个非负的数值标量。您可以找到功能齐全的int2bin 和bin2int 函数on my GitHub。