Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 无符号整数C++;便携性_C++_Coding Style_Int - Fatal编程技术网

C++ 无符号整数C++;便携性

C++ 无符号整数C++;便携性,c++,coding-style,int,C++,Coding Style,Int,是否为适用于大多数/所有平台的“非原始整数”定义了缩短标签typedef?我在Windows中看到过很多uint或uint,但我知道这在其他平台上并不一致。我很乐意为每个实例键入“unsigned int”,但是如果有一个标准的typedef(比如“uint”,尽管它的实现并不一致),我会使用它。在做了一点研究之后,我怀疑情况并非如此,但人们可能对C++11等或实现相同标签的*nix/Windows标准头有所了解。我对严格指定unsigned int的位大小不太感兴趣:它只用于低迭代循环。基本上

是否为适用于大多数/所有平台的“非原始整数”定义了缩短标签typedef?我在Windows中看到过很多uint或uint,但我知道这在其他平台上并不一致。我很乐意为每个实例键入“unsigned int”,但是如果有一个标准的typedef(比如“uint”,尽管它的实现并不一致),我会使用它。在做了一点研究之后,我怀疑情况并非如此,但人们可能对C++11等或实现相同标签的*nix/Windows标准头有所了解。我对严格指定unsigned int的位大小不太感兴趣:它只用于低迭代循环。

基本上,类型大小由您使用的编译器和目标程序(可执行文件)将运行的平台定义

例如,在x86机器上,几乎所有编译器都将
int
(因此
unsigned int
)表示标准的32位整数。但是,在假设的128位CPU上,
int
可能指的是64位或128位整数

但是,如果您像我一样,坚持始终知道整数的大小,我建议您查看C++11中引入的
cstdint
标题

这允许您独立于编译器和平台指定特定大小的整数(例如,
uint32\u t
)。不过要小心,如果某个特定平台不支持该大小,那么您的程序要么无法编译

有关更多详细信息,请访问此网站:
使用<代码> >包含<和代码> C和<代码>包含C++的 .

基本上,类型大小是由您正在使用的编译器和目标程序(可执行文件)运行的平台定义的。 例如,在x86机器上,几乎所有编译器都将

int
(因此
unsigned int
)表示标准的32位整数。但是,在假设的128位CPU上,
int
可能指的是64位或128位整数

但是,如果您像我一样,坚持始终知道整数的大小,我建议您查看C++11中引入的
cstdint
标题

这允许您独立于编译器和平台指定特定大小的整数(例如,
uint32\u t
)。不过要小心,如果某个特定平台不支持该大小,那么您的程序要么无法编译

有关更多详细信息,请访问此网站:
对于C和<代码>使用< <代码> >包含> <代码> C++。

< p>语言标准和标准库不定义任何类型的“别名”别名,除了提供替代名称之外,它们没有任何用途。


标准库确实定义了几个具有平台相关含义的类型别名。例如,整数类型
std::uintpttr\u t
是一种足以表示任何对象指针值的整数类型
std::max_align\u t
是一种类型,其
alignof
-值是平台提供的最大值。其他类型别名是有条件定义的
std::uint32_t
etc,如果它们存在,则是固定宽度的整数类型,具有两个补码表示。当然,这些只是其中一种基本类型的typedef,但含义不同,没有一种是琐碎的,因此有理由使用这些typedef。

语言标准和标准库没有定义任何“琐碎的”类型的别名除了提供一个替代名称之外没有其他用途


标准库确实定义了几个具有平台相关含义的类型别名。例如,整数类型
std::uintpttr\u t
是一种足以表示任何对象指针值的整数类型
std::max_align\u t
是一种类型,其
alignof
-值是平台提供的最大值。其他类型别名是有条件定义的
std::uint32_t
etc,如果它们存在,则是固定宽度的整数类型,具有两个补码表示。当然,这些只是基本类型之一的typedef,但含义不同,没有一个是琐碎的,因此有理由使用这些typedef。

无符号int的缩写是
无符号
。类似地,
long int
可以缩短为
long
,而
unsigned long int
可以缩短为
unsigned long


此规则有一个例外:
有符号字符
无符号字符
可以缩短为
字符

无符号整数的缩写为
无符号
。类似地,
long int
可以缩短为
long
,而
unsigned long int
可以缩短为
unsigned long


<>这个规则有一个例外:<代码>符号char < /> > NO>代码>未签名char <代码>可以缩短为<代码> char < /> >。<代码>未签名int >代码>是一个标准的、内置的类型,您可以在每个C++平台上使用它。你想解决什么问题?在使用内置类型时,你不必担心可移植性(除非你正在为嵌入式系统或类似的东西构建应用程序)。它们将以同样的方式工作,除非您想要使用某种网络—在不同的体系结构之间发送数据—并且除非您使用诸如“ld”、“lld”等printf格式说明符并尝试在32位和64位上编译。所以我也会选择uint32_t和类似的东西。看看这里:@kerrek SB-我们的愿望是使用最常用的东西,即如果人们使用快捷方式。我将继续使用更详细但清晰的“unsigned int”。鉴于该问题因“基于意见”而获得3张反对票,我重新编写了它,但要感谢那些回答的人。
unsigned int