Explanation of num2str(x) - '0'

25 visualizaciones (últimos 30 días)
Marvin Ott
Marvin Ott el 7 de Mayo de 2018
Comentada: Rik el 15 de Dic. de 2020
Hi, for my homework I had to split a binary number into it's individual parts. After some tying and research I found out that I can use:
num2str(x) -'0'
I now know that it works but I don't know how it works. Can someone explain it to me?
Thanks in advance.
Marvin

Respuesta aceptada

Ameer Hamza
Ameer Hamza el 7 de Mayo de 2018
It works because num2str convert the number into a char array. For example
x = 10001100;
y = num2str(x)
ans =
'10001100'
In computer memory, each character is stored on the basis of its ASCII value. From ASCII table character '1' = 49 (decimal) and '0' = 48 (decimal). Therefore in computer memory y is saved as
y = [49 48 48 48 49 49 48 48]
now when you subtracted '0' = 48 decimal, what you are doing is
[49 48 48 48 49 49 48 48] - 48
which gives you
[1 0 0 0 1 1 0 0]
  2 comentarios
Abhinandh V
Abhinandh V el 15 de Dic. de 2020
nice
Rik
Rik el 15 de Dic. de 2020
Actually chars are Unicode codepoints encoded with UTF-16 in Matlab (doclink). The difference starts to be relevant beyond 127, and starts to matter a lot beyond 0xFFFF (i.e. beyond the basic multilingual plane, which contains e.g. most emoji).

Iniciar sesión para comentar.

Más respuestas (2)

Star Strider
Star Strider el 7 de Mayo de 2018
Character arrays exist as ASCII or other numeric encodings, so that each letter or other character is assigned a numeric value. In MATLAB, they are then handled as any other numeric array.
So:
zerochar = double('0')
chars = '12345'
numarray1 = double(chars)
numarray2 = numarray1 - zerochar
expands to:
zerochar =
48
chars =
'12345'
numarray1 =
49 50 51 52 53
numarray2 =
1 2 3 4 5

David Fletcher
David Fletcher el 7 de Mayo de 2018
Editada: David Fletcher el 7 de Mayo de 2018
num2str(x) - this converts the number to a string
Once converted subtracting '0' subtracts the character code for 0 from all entries. Therefore all zero characters become the actual value of 0, and all one characters become the actual value of 1 (since the ASCII code for '1' is one greater than the ASCII code for '0'). Subtracting 48 (the ascii code for '0' achieves the same thing).
>> '0' - 48
ans =
0
>> '1' -48
ans =
1
  1 comentario
Stephen23
Stephen23 el 7 de Mayo de 2018
"num2str(x) - this converts the number to a string"
The output is (for historic reasons) not a string, but is actually a character array.

Iniciar sesión para comentar.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by