2025-03-15 18:49:06 +01:00
|
|
|
|
```
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
morph_i64_as_twos_complement_to_zigzag ()
|
2025-03-20 16:28:16 +01:00
|
|
|
|
ℤ ~ native.Int64
|
|
|
|
|
--> ℤ ~ ZigZagInt ~ ℕ ~ native.UInt64
|
2025-03-15 18:49:06 +01:00
|
|
|
|
```
|
|
|
|
|
if( *src >= 0 ) {
|
|
|
|
|
*dst = (2 * (uint64_t)*src)
|
|
|
|
|
} else {
|
|
|
|
|
*dst = (2 * (uint64_t)(- *src)) - 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
morph_i64_as_zigzag_to_twos_complement ()
|
2025-03-20 16:28:16 +01:00
|
|
|
|
ℤ ~ ZigZagInt ~ ℕ ~ native.UInt64
|
|
|
|
|
--> ℤ ~ native.Int64
|
2025-03-15 18:49:06 +01:00
|
|
|
|
```
|
|
|
|
|
if( *src % 2 == 0 ) {
|
|
|
|
|
*dst = *src / 2;
|
|
|
|
|
} else {
|
|
|
|
|
*dst = - ((*src+1) / 2);
|
|
|
|
|
}
|
|
|
|
|
```
|