Which C datatype can represent a 40-bit binary number?

后端 未结 4 1642
说谎
说谎 2020-12-04 02:04

I need to represent a 40-bit binary number. Which C datatype should be used to handle this?

4条回答
  •  野趣味
    野趣味 (楼主)
    2020-12-04 02:18

    If you're using a C99 or C11 compliant compiler, then use int_least64_t for maximum compatibility. Or, if you want an unsigned type, uint_least64_t. These are both defined in

    usually also defines int64_t, but since it's not required by the standard, it may not be defined in every implementation. However:

    • int_least64_t - at least 64 bits, and
    • int_fast64_t - the fastest size in this implementation of at least 64 bits

    are both required to be present in C99 and C11 (See § 7.18.1.2-3 in the C99 standard, and § 7.20.1.2-3 in the C11 standard).


    Although C99 specifies that long long is at least 64 bits on a particular machine (§ 5.2.4.2.1), the types in are designed to be explicitly portable.

    You can read more about integer sizes on different platforms here. Note that the size of integer types are a problem with the long data type - on 64 bit Windows, it's currently 32 bits, whereas on 64 bit linux it's 64 bits. For this reason, I believe you're safest using the types from

    It's worth noting that some feel that long long is more readable. Personally, I prefer the types from , because they allow you to say what you mean when you use them - which I find more readable. Of course, readability is often a matter of taste - and if you're working with an existing codebase, I'd just follow whatever they do :)


    If your compiler only supports C89, then R..'s solution will allow you up to 53 bits of integer precision.

提交回复
热议问题