我可以用C实现我自己的整数算法和整数数据类型吗?

我可以用C实现我自己的整数算法和整数数据类型吗?,c,types,C,Types,数据类型在C语言中取决于系统,它们的位长度可能会因不同的机器而改变。我知道头提供固定宽度的整数数据类型。然而,该报头保证提供的数据类型至少具有指定数量的N个比特。() 但在我的应用程序中,我需要具有精确位长度的数据类型。例如,如果数据类型为uint16,则应为16位,而不是至少为16位。现在我的问题是:我可以使用“unsigned char”和“char”数据类型(因为它们在每台机器中为8位)作为主构建块来定义新的整数数据类型吗?我可以实现相关的算术运算并重载像“+”这样的算术运算符吗?或者已经

数据类型在C语言中取决于系统,它们的位长度可能会因不同的机器而改变。我知道头提供固定宽度的整数数据类型。然而,该报头保证提供的数据类型至少具有指定数量的N个比特。()

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


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

c规范中的任何内容都不能保证字符为8位,这是一个好主意。

c规范中的任何内容都不能保证字符为8位,这是一个好主意。

已经有一种int类型可以保证它“至少”为N位,即
int\u至少N\u t


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

已经有一个int type保证它“至少”N位,即
int\u t


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

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

    struct defineInt{
        int a:16;
    };

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

    struct defineInt{
        int a:16;
    };
不要(重复)使用字符。定义您自己的类型

对于Cxx11,请查看和系列。
-字符表示8位代码单元,
-char16_t表示16位代码单元,以及 -char32\u t用于32位代码单元。

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

对于Cxx11,请查看和系列。
-字符表示8位代码单元,
-char16_t表示16位代码单元,以及
-char32\u t用于32位代码单元。

如果需要具有精确位数的类型,请使用
int24\u t
uint16\u t
等类型-它们保证具有精确位数。C分别提供了
int\u-least8\u-t
之类的类型,但您需要的是
uint16\u-t
,您不需要实现任何东西。

如果您需要具有精确位数的类型,请使用
int24\u-t
uint16\u-t
之类的类型-它们保证具有精确位数。C提供了类型,如代码> ItListAS8St,但您需要的是代码> UTI1616T ,并且不需要实现任何东西。

已经有一个ItType保证它至少“N位”。C不允许重载——尝试C++。无论如何,您遇到的确切问题是什么?
uint16\u t
正好有16位。“精确宽度整数(
intN\u t
uintN\u t
)类型保证在所有实现中都有相同的N位数。只有在实现中可用时才包括该类型。”@EdHeal我编辑了该问题,谢谢你的回复。已经有一个InType保证它至少“N位”。C不允许重载——尝试C++。无论如何,您遇到的确切问题是什么?
uint16\u t
正好有16位。“精确宽度整数(
intN\u t
uintN\u t
)类型保证在所有实现中都有相同的N位数。只有在实现中可用时才包括该类型。”@EdHeal我编辑了该问题,感谢您的回复。POSIX规范要求字符位==8,比较。-但在任何情况下,
uint16\u t
都有16位,独立于字符位。POSIX规范要求字符位==8,比较。-但在任何情况下,
uint16\u t
都有16位,独立于字符位。我只是想知道:目前有没有任何平台有
int24\u t
?但在wiki页面中,它说,对于确切的宽度整数类型,“只有在实现中可用时才包括在内”。我们如何知道这些类型是可用的?你真的确定这些类型是机器独立的并且适用于所有情况吗?无论如何,我测试了所有intxx_t和uintxx_t数据类型的sizeof()。它们返回精确的字节值。所以他们看起来很可靠。谢谢你的回复。我只是想知道:目前有没有一个平台有
int24\t
?但是在wiki页面上,它说,对于确切的宽度整数类型,“只有在实现中可用时才包括在内”。我们如何知道这些类型是可用的?你真的确定这些类型是机器独立的并且适用于所有情况吗?无论如何,我测试了所有intxx_t和uintxx_t数据类型的sizeof()。它们返回精确的字节值。所以他们看起来很可靠。谢谢你的回复。这对算术运算来说不是很实用,但它对按位运算最有用。但是算术运算取决于运算中所有操作数的类型,运算的结果总是会升级到更高的数据类型。算术运算并不实用,尽管它最适合于按位运算。但是算术运算取决于运算中所有操作数的类型,运算的结果总是会升级到更高的数据类型。