问题标签 [cstdint]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1388 浏览

c++11 - C++ 11 int8_t 错误输入/输出

这是我程序中的一段代码。我正在使用int8_t数据类型,并且在输入/输出方面遇到了一些问题。显然,int8_t在程序中使用需要为编译器-std=c++11设置标志。g++我这样做了,但是存在运行时错误。这是我的代码:

这是程序的输出:

$shell 提示符。无论如何,似乎只有第一个数字是从输入流中读取的。即便如此,整数除法9 / 10应该返回0,而不是5。该程序旨在执行95 / 10并返回9. 理论上,这个程序应该可以工作,但显然,即使是除法运算符也是有问题的。我应该注意,使用int而不是int8_t使程序按预期工作。我怀疑在这种情况下,有人会告诉我使用int数据类型并处理它。但我们是软件工程师!我想知道如果int8_t数据类型本身就有缺陷。为什么它不能接受正确的用户输入,而且还破坏了除法运算符?!任何值得使用的编程语言都必须没有这样的缺陷。而且我认为 C++ 足够流行,以至于最终有人意识到它int8_t在某种意义上是有缺陷的。这是我需要知道的复杂性。

0 投票
1 回答
209 浏览

c - 为什么 int_fast16_t 在 64 位系统上是 64 位?

我在我的实现中查看了头文件<stdint.h>。我看到以下内容:

我有一个 64 位系统,所以 long int 占用 64 位。为什么所有三种数据类型都被定义为长整数?我了解 int_fast64_t 的情况,它是 64 位。但是为什么 16 位和 32 位数据类型有 64 位呢?这是某种错误吗?我创建了一个小程序来检查是否是这种情况:

这些数据类型实现的大小是否已定义?哪些特性或特征将数据类型定义为“快速”?是数据块从 RAM 加载到 CPU 的速度吗?如果int_fast16_tint_fast32_t是 8 字节宽,那么在性能方面有什么好处?在64 位系统上访问 64 位数据类型真的更快吗?

0 投票
1 回答
71 浏览

c++ - 在 C++11 中利用 int*_t、int_fast*_t 和 int_least*_t 之间差异的一个很好的例子是什么?

根据在线文档,这些固定宽度整数类型之间存在差异。因为int*_t我们将宽度固定为 的值*。然而对于其他两种类型,描述中使用了形容词最快最小来请求底层数据模型提供的最快或最小的实例。

“最快”或“最小”的客观含义是什么?什么是有利甚至必要的例子?

0 投票
3 回答
1559 浏览

c++ - 为什么 sscanf 不能从一个字符串中读取 uint64_t 和 char?

我尝试使用从一个字符串sscanf中读取 auint64_t和 a ,但每次尝试此操作时char它只读取它ui(断言失败)。ret == 2

0 投票
2 回答
192 浏览

c++ - 标准是否保证 uint8_t、int8_t 和 char 都是唯一类型?

似乎以下内容可以保证通过(已在此处询问):

引用cppreference

[ ] 与orchar具有相同的表示和对齐方式,但始终是不同的类型signed charunsigned char

是否也保证int8_tanduint8_t是根据未定义的显式签名类型 定义的,因此也与 形成一组 3 个不同的类型?charchar

0 投票
2 回答
1709 浏览

c++ - 如何检查是否定义了固定宽度的整数

在 C++ 中,固定宽度整数被定义为optional,但我似乎找不到推荐的方法来检查它们是否实际定义。

检查固定宽度整数是否可用的便携式方法是什么?

0 投票
1 回答
383 浏览

string - cstdint string c++>C11 int /usr/include/c++/8/cstdint:53:11: error: '::int_fast8_t' has not been declared

我有一个用 C++ 1996 编写的程序,我想将它编译为 C++ 17。添加 #include 时收到一条错误消息,我被称为 cstdint。这缺少以下声明:

如果我用 c++ 98 编译程序,我没有问题。

以前有没有人遇到过,或者您知道解决方案吗?

问候安德烈

0 投票
0 回答
181 浏览

c++ - 使用 `std::numeric_limits 有什么好处吗::max()` 而不是简单的`UINT64_MAX`?(即:`std::numeric_limits<>` vs cstdint)

定义在<cstdint>https ://en.cppreference.com/w/cpp/header/cstdint 。

这是我一直使用的。但是,我看到 C++ 也提供了这种替代方法:

(请参阅:https ://en.cppreference.com/w/cpp/types/numeric_limits/max ),这是<limits>标题中定义的许多数字限制选项的一部分:https ://en.cppreference.com/w/ cpp/types/numeric_limits

C++ 版本对我来说似乎过于冗长,而且似乎没有任何好处。我认为它只是为了彻底而包含在内,因为他们通过其他numeric_limits<>用 C++ 创建的功能添加了额外的功能,但我想,当他们在做这件事时,他们想涵盖所有内容。

std::numeric_limits<uint64_t>::max()与 C 或 C++ 版本 ( )相比,使用纯 C++ 版本 ( ) 有什么好处UINT64_MAX吗?

我真的更喜欢这个UINT64_MAX版本,但总的来说,每当他们看到我用 C++ 写一些在 C 中也有效的东西时,都会从铁杆 C++ 开发人员那里找到很多回击。:)

注意:我还没有反对这个版本,但我想先了解一下,看看是否有一些我遗漏的东西真正让一个版本比另一个版本更好。


更新:这是我自己的答案:

我不太高兴这个问题在我按下提交按钮添加我自己的答案的同一秒就被关闭了,但这是我自己对这个问题的回答:

正如@Bob__ 在问题下的评论中指出的那样,在编写需要用 typename 替换部分std::numeric_limits<uint64_t>::max()的 C++ 模板时,它确实是首选。uint64_tT

但是,如果不在模板中,我UINT64_MAX认为它会更受青睐,因为它简短、直截了当、不那么冗长且更易于阅读。

0 投票
0 回答
53 浏览

c++ - 使用时的 C++ 随机输出

我的项目中有以下代码:

当我打印任何这些类型的值uint8_tint8_t得到随机输出时。当我打印任何其他integer类型的值时,cstdint我得到了预期的输出。仅当我打印 8 位值时才会出现随机输出。

注意:我最近开始学习 c++ 编程,因此我是新手。

0 投票
1 回答
101 浏览

c++ - 给定 std::hex、uint8_t 与 int 的 strringstream 中的不同行为

我想 uint8_t 实际上只是 char 的别名,这意味着当字符串流中的字符被读回时,它们是本地存储的,即字符的 ascii 代码,而如果将 char 输入到 int,则std::hex 指定,它被读取为转换为基数 10 的十六进制数字。

这是一个展示这种行为的小例子,但我问的原因是因为我一开始就假设指定 unit8_t 的输出向量是正确的方法,因为我需要稍后将此向量作为数组提供给 C函数作为字节向量(您将其作为 void 指针传入,它会以某种方式计算出如何处理它)。所以我认为将输入字符对读入字符串流,然后读入 uint8_t 将帮助我跳过手动位移。有没有办法保持读入 uint8_t 但唤起对 int 的处理的想法?我可以在从 stringstream 读取时转换为 int 吗?要不然是啥?

输出