# Help with a piece of code

조회 수: 4(최근 30일)
jip prinsen 2017년 9월 21일
댓글: José-Luis 2017년 9월 21일
Hey all, I'm working on a school project that's about changing the order of characters in a binary array. In the process of writing it, I found a bit of code online to help me:
v = sprintf('%d', array3)
endarray = v - '0'
Basically, what this does is it takes the value of array3, which for example is [1011010] and creates a variable endarray, which in turn becomes [1 0 1 1 0 1 0]. When I implemented this piece of code I didn't quite know how it functioned, and it wasn't explained on the page where I found it, so I decided to go back to it later. Unfortunately I still haven't figured it out. I can't wrap my head around the combinations of sprintf, %d, and the -'0'.
Any help with understanding these two lines would be greatly appreciated.
##### 댓글 수: 1표시숨기기 없음
Pal Szabo 2017년 9월 21일
I recommend to replace "Help with a piece of code" with something more meaningful

댓글을 달려면 로그인하십시오.

### 채택된 답변

Pal Szabo 2017년 9월 21일
편집: Pal Szabo 2017년 9월 21일
array3 is an integer. Sprintf needs to no that it is in decimal point notation, that's why you need the %d. More info: https://uk.mathworks.com/help/matlab/matlab_prog/formatting-strings.html. Strings in matlab are basically chain of chars. By subtractring -'0', you are basically subtracting 0 (decimal notation) from the ASCII values of the chars within the string. Executing an operation on each char within the chain of chars (aka on the string) gives a result of individual chars, since the operation only valid on individual chars, not on the string as a whole. Try this for example:
array3 = [1011010]
v = sprintf('%d', array3)
endarray = v - '0' - 'd'
You get
-99 -100 -99 -99 -100 -99 -100
as result. 'd' is the ASCII character with decimal value 100. https://en.wikipedia.org/wiki/ASCII
You get the same result if define endarray like this:
endarray = v - '0' - 100
Here 100 is an integer, not a chain of chars.
Sub in different values for 'd': the results are consistent with the ASCII table.
Hope this helps.
EDIT: I see you added a tag 'binary'. I do not think array3 is binary, just because it has only ones and zeros, it is pretty much a decimal value. Just like 8+2=10, 10 is not binary.
##### 댓글 수: 3표시숨기기 이전 댓글 수: 2
José-Luis 2017년 9월 21일
Looks like array3 is a scalar and not a logical array.

댓글을 달려면 로그인하십시오.

### 추가 답변(1개)

José-Luis 2017년 9월 21일
편집: José-Luis 2017년 9월 21일
Generating a "binary" (logical) array:
a = rand(10,1) > 0.5;
Transforming the binary array into a string. v is a character array.
v = sprintf('%d', a)
Transforming the string into a numeric array:
endarray = v - '0'
Matlab does implicit conversions. When you do arithmetic operation with characters, it transforms them into double and then performs the operations.
'0' - 48
Please note that all that is unnecessary if you want an array of doubles from a logical array. You could just have:
endarray = double(a)
##### 댓글 수: 2표시숨기기 이전 댓글 수: 1
José-Luis 2017년 9월 21일
Thanks. I was wrong but in essence sort of right.
Definitely maybe.

댓글을 달려면 로그인하십시오.

### 범주

Find more on Characters and Strings in Help Center and File Exchange

### Community Treasure Hunt

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

Start Hunting!

Translated by