我可以在C中实现自己的整数算术和整数数据类型吗?

时间:2014-03-07 09:28:17

标签: c types

数据类型是系统依赖于C的,并且它们的位长可能会因不同的机器而发生变化。我知道< inttypes.h>标头,提供固定宽度的整数数据类型。但是,此标头保证提供的数据类型具有至少指定的位数N. (Wiki page

但我需要在我的应用程序中使用具有精确位长的数据类型。例如,如果数据类型为uint16_t,则为16位,而不是至少 16位。现在我的问题是:我可以使用“unsigned char”和“char”数据类型定义新的整数数据类型(因为它们将在每台机器中为8位)作为主要的构建块吗?我可以实现相关的算术运算和超载算术运算符,如“+”吗?或者还有其他解决方案吗?

编辑:我的确切问题是关于DES这样需要固定位的加密算法的实现。

5 个答案:

答案 0 :(得分:2)

您可以通过在结构中使用位字段来实现。您可以将位数设置为所需的长度。 例如: -

    struct defineInt{
        int a:16;
    };

答案 1 :(得分:1)

c规范中没有任何内容可以保证char是8位,但很不错。

答案 2 :(得分:1)

如果您需要具有确切位数的类型,请使用int24_tuint16_t等类型 - 它们保证具有确切的位数。 C分别提供类似int_least8_t的类型,但您需要的是uint16_t并且您不需要实现任何内容。

答案 3 :(得分:0)

已经存在一个int类型,它保证stdint.h中的“至少”N位int_leastNN_t可用。

此外,您可以通过声明一个typedef来“自己动手”,该类型根据当前体系结构或sizeof特定的int大小来为特定的int类型添加别名。

答案 4 :(得分:0)

不要(重新)使用char。定义你自己的类型。

对于Cxx11,请查看char16_t和家人   - char用于8位代码单元,
  - char16_t用于16位代码单元,和   - char32_t用于32位代码单元。