Hallo, ich muss zwei unsigned 64bit zahlen die als struct in uint8_t typen vorliegen subtrahieren. Das addieren ist mir so gelungen.
1 | uint16_t partial; |
2 | |
3 | partial = a->word0 + b->word0; |
4 | |
5 | resultUID->word0 = partial & 0x00FF; |
6 | partial = (partial >> 8) + a->word1 + b->word1; |
7 | resultUID->word1 = partial & 0x00FF; |
8 | partial = (partial >> 8) + a->word2 + b->word2; |
9 | resultUID->word2 = partial & 0x00FF; |
10 | partial = (partial >> 8) + a->word3 + b->word3; |
11 | resultUID->word3 = partial & 0x00FF; |
12 | partial = (partial >> 8) + a->word4 + b->word4; |
13 | resultUID->word4 = partial & 0x00FF; |
14 | partial = (partial >> 8) + a->word5 + b->word5; |
15 | resultUID->word5 = partial & 0x00FF; |
16 | partial = (partial >> 8) + a->word6 + b->word6; |
17 | resultUID->word6 = partial & 0x00FF; |
18 | partial = (partial >> 8) + a->word7 + b->word7; |
19 | resultUID->word7 = partial & 0x00FF; |
20 | |
21 | /* if the result overflowed, return nonzero */
|
22 | return (partial >> 8); |
Das carry wird immer wieder übertragen. Wie man subtrahiert ist mir im Prinzip bekannt und das klappt auch auf Papier nur das umsetzen im C Code fällt mir schwer. könnte mir jemand dabei helfen ? Im Prinzip muss man bloß anderes herum denken.