On Wed, 2021-08-25 at 14:08 -0700, Fred Cisin via cctalk wrote:
> That is
not how C defines bytes or ints, fyi.
On Wed, 25 Aug 2021, ben via cctalk wrote:
I suspect the standard says a byte is at least 7
bits.
Thus 8 bit data is NOT PORTABLE.
I don't know from "the standard", but, K&R said that
an "int" could be whatever size was most convenient for the
processor,
BUT, that an "int" could not be shorter than a "short", nor longer
than a
"long"
The C 2011 standard (ISO/IEC 9980-2011) subclause 6.2.5 paragraphs 4-9
say
There are five standard signed integer types, designated as signed
char, short int, int, long int, and long long int. (These and other
types may be designated in several additional ways, as described in
6.7.2.) There may also be implementation-defined extended signed
integer types.38) The standard and extended signed integer types are
collectively called signed integer types.
An object declared as type signed char occupies the same amount of
storage as??plain?? char object. A ??plain?? int object has the natural
size suggested by the architecture of the execution environment (large
enough to contain any value in the range INT_MIN to INT_MAX as defined
in the header <limits.h>).
For each of the signed integer types, there is a corresponding (but
different) unsigned integer type (designated with the keyword unsigned)
that uses the same amount of storage (including sign information) and
has the same alignment requirements. The type _Bool and the unsigned
integer types that correspond to the standard signed integer types are
the standard unsigned integer types. The unsigned integer types that
correspond to the extended signed integer types are the extended
unsigned integer types. The standard and extended unsigned integer
types are collectively called unsigned integer types.
The standard signed integer types and standard unsigned integer types
are collectively called the standard integer types; the extended signed
integer types and extended unsigned integer types are collectively
called the extended integer types.
For any two integer types with the same signedness and different
integer conversion rank (see 6.3.1.1), the range of values of the type
with smaller integer conversion rank issubrange of the values of the
other type.
The range of nonnegative values of a signed integer type is a subrange
of the corresponding unsigned integer type, and the representation of
the same value in each type is the same.41) A computation involving
unsigned operands can never overflow, because a result that cannot be
represented by the resulting unsigned integer type is reduced modulo
the number that is one greater than the largest value that can be
represented by the resulting type.
41) The same representation and alignment requirements are meant to
imply interchangeability as arguments to functions, return values from
functions, and members of unions.