Liste des Groupes | Revenir à c arch |
On Fri, 6 Sep 2024 22:41:12 +0000, Chris M. Thomasson wrote:[...]
On 9/5/2024 10:04 AM, Terje Mathisen wrote:# define START 0x80000001David Brown wrote:>On 05/09/2024 11:12, Terje Mathisen wrote:>David Brown wrote:>Unsigned types are ideal for "raw" memory access or external data,>
for anything involving bit manipulation (use of &, |, ^, << and >>
on signed types is usually wrong, IMHO), as building blocks in
extended arithmetic types, for the few occasions when you want two's
complement wrapping, and for the even fewer occasions when you
actually need that last bit of range.
That last paragraph enumerates pretty much all the uses I have for
integer-type variables, with (like Mitch) a few apis that use (-1) as
an error signal that has to be handled with special code.
>
You don't have loop counters, array indices, or integer arithmetic?
Loop counters of the for (i= 0; i < LIMIT; i++) type are of course fine
with unsigned i, arrays always use a zero base so in Rust the only array
index type is usize, i.e the largest supported unsigned type in the
system, typically the same as u64.
>
unsigned arithmetic is easier than signed integer arithmetic, including
comparisons that would result in a negative value, you just have to make
the test before subtracting, instead of checking if the result was
negative.
>
I.e I cannot easily replicate a downward loop that exits when the
counter become negative:
>
for (int i = START; i >= 0; i-- ) {
// Do something with data[i]
}
for (int i = START; i > -1; i-- ) {
// Do something with data[i]
}
>
;^)
Les messages affichés proviennent d'usenet.