在 Matlab 中将十进制转换为二进制?
Convert decimal to binary in Matlab?
我正在将 10 进制数转换为 2 进制数,并指定我想用来表示这些 10 进制数的位数。
这是我的负数代码:
function output = DTB(decimal,binary)
if decimal < 0
smallestNum = -(2^(bits-1));
if decimal < smallestNum
error('%d cannot be represented in %d bits. Increase the number of bits. ',decimal,bits);
output = '';
end
output = '1';
bits = bits - 1;
if smallestNum == decimal
while bits ~= 0
output = [output,'0'];
bits = bits - 1;
end
end
num = smallestNum;
while num ~= decimal
num = smallestNum + 2^(bits-1);
if num > decimal
output = [output,'0'];
else
output = [output,'1'];
smallestNum = smallestNum + 2^(bits-1);
end
bits = bits - 1;
end
while bits ~= 0
output = [output,'0'];
bits = bits - 1;
end
end
这很好用。我 运行 遇到的问题(很奇怪,因为从正小数到二进制应该更容易)是正整数。它应该只是对负数算法的一个小调整,对吧?例如,正数部分在 decimal
= 8 和 bits
= 6 的情况下不起作用(它不适用于 2 的不同次方)。怎么了,这里?
这是正整数的代码:
if decimal > 0
largestNum = (2^(bits-1))-1;
if decimal > largestNum
error('%d cannot be represented in %d bits. Increase the number of bits. ',decimal,bits);
output = '';
end
% first spot must be zero to show it's a positive number
output = '0';
bits = bits - 1;
largestNum = largestNum + 1;
num = largestNum;
while num ~= decimal
num = largestNum - 2^(bits-1);
if num > decimal
output = [output,'0'];
end
if num <= decimal
output = [output,'1'];
largestNum = largestNum - 2^(bits-1);
end
bits = bits - 1;
end
while bits ~= 0
output = [output,'0'];
bits = bits - 1;
end
当您在输出数组中放置一个零时,您需要减少最大数量,因为您实际上是从一个全为 1 的二进制数组(即 largestNum)开始。此代码对我有用:
if decimal > 0
largestNum = (2^(bits-1))-1;
if decimal > largestNum
error('%d cannot be represented in %d bits. Increase the number of bits. ',decimal,bits);
output = '';
end
% first spot must be zero to show it\'s a positive number
output = '0';
bits = bits - 1;
largestNum = largestNum + 1;
num = largestNum;
while num ~= decimal
num = largestNum - 2^(bits-1);
if num > decimal
output = [output,'0'];
largestNum = largestNum - 2^(bits-1);
end
if num <= decimal
output = [output,'1'];
end
bits = bits - 1;
end
while bits ~= 0
output = [output,'0'];
bits = bits - 1;
end
end
我不确定这是做什么用的,但我强烈建议使用内置的 dec2bin 来执行此操作。
你可以在 matlab 中使用这个脚本:
a=[1 2 3 4;-2 -4 3 4;7 8 9 4];
[c,v]=size(a);
n3=c*v;
word_len=5;%with bits of binary word
data = reshape(a', n3, 1);
databin= fi(data,1,5);
h=bin(databin)%result
我正在将 10 进制数转换为 2 进制数,并指定我想用来表示这些 10 进制数的位数。
这是我的负数代码:
function output = DTB(decimal,binary)
if decimal < 0
smallestNum = -(2^(bits-1));
if decimal < smallestNum
error('%d cannot be represented in %d bits. Increase the number of bits. ',decimal,bits);
output = '';
end
output = '1';
bits = bits - 1;
if smallestNum == decimal
while bits ~= 0
output = [output,'0'];
bits = bits - 1;
end
end
num = smallestNum;
while num ~= decimal
num = smallestNum + 2^(bits-1);
if num > decimal
output = [output,'0'];
else
output = [output,'1'];
smallestNum = smallestNum + 2^(bits-1);
end
bits = bits - 1;
end
while bits ~= 0
output = [output,'0'];
bits = bits - 1;
end
end
这很好用。我 运行 遇到的问题(很奇怪,因为从正小数到二进制应该更容易)是正整数。它应该只是对负数算法的一个小调整,对吧?例如,正数部分在 decimal
= 8 和 bits
= 6 的情况下不起作用(它不适用于 2 的不同次方)。怎么了,这里?
这是正整数的代码:
if decimal > 0
largestNum = (2^(bits-1))-1;
if decimal > largestNum
error('%d cannot be represented in %d bits. Increase the number of bits. ',decimal,bits);
output = '';
end
% first spot must be zero to show it's a positive number
output = '0';
bits = bits - 1;
largestNum = largestNum + 1;
num = largestNum;
while num ~= decimal
num = largestNum - 2^(bits-1);
if num > decimal
output = [output,'0'];
end
if num <= decimal
output = [output,'1'];
largestNum = largestNum - 2^(bits-1);
end
bits = bits - 1;
end
while bits ~= 0
output = [output,'0'];
bits = bits - 1;
end
当您在输出数组中放置一个零时,您需要减少最大数量,因为您实际上是从一个全为 1 的二进制数组(即 largestNum)开始。此代码对我有用:
if decimal > 0
largestNum = (2^(bits-1))-1;
if decimal > largestNum
error('%d cannot be represented in %d bits. Increase the number of bits. ',decimal,bits);
output = '';
end
% first spot must be zero to show it\'s a positive number
output = '0';
bits = bits - 1;
largestNum = largestNum + 1;
num = largestNum;
while num ~= decimal
num = largestNum - 2^(bits-1);
if num > decimal
output = [output,'0'];
largestNum = largestNum - 2^(bits-1);
end
if num <= decimal
output = [output,'1'];
end
bits = bits - 1;
end
while bits ~= 0
output = [output,'0'];
bits = bits - 1;
end
end
我不确定这是做什么用的,但我强烈建议使用内置的 dec2bin 来执行此操作。
你可以在 matlab 中使用这个脚本:
a=[1 2 3 4;-2 -4 3 4;7 8 9 4];
[c,v]=size(a);
n3=c*v;
word_len=5;%with bits of binary word
data = reshape(a', n3, 1);
databin= fi(data,1,5);
h=bin(databin)%result