gpt4 book ai didi

c - 类型大小、Stind.h、有符号和无符号整数

转载 作者:行者123 更新时间:2023-11-30 21:30:36 25 4
gpt4 key购买 nike

有关更多详细信息,我正在从一本书中学习(以艰难的方式学习 C),我有一个练习,他告诉我学习一些字体大小,但我没有太多细节,而且我不太明白以及什么是无符号和有符号整数以及使用它的位置。我只有一个想法:无符号没有负数,有符号可以有负数,但在外界看来,无法达到与无符号一样高的自然数。 还不止这些吗?

本书包含一些命令uint_least(N)_t、INT_LEAST(N)_MAX、INT_LEAST(N)_MIN、UINT_LEAST(N)_MAX、int_fast(N)_t、uint_fast(N)_t但我不明白我能用它们做什么。

请告诉我它们有什么用?我什么时候用这个?是像 Int 或 if? 这样的命令,或者在像 i < unit_fast8_t; 这样的循环中使用它; i++

附注我的英语很糟糕,我知道:(我很难理解一些术语。

最佳答案

假设我们的 int 只有 3 位可用。当你决定不做的时候需要负值,您有 2^3 = 8 可能的值(包括零)可以存储在3位int中:

000 -> 0
001 -> 1
010 -> 2
011 -> 3
100 -> 4
101 -> 5
110 -> 6
111 -> 7

这将是无符号整数所以当你知道你不需要负数值,例如您想用它来计算某个循环:

for (int_3bit i = 0; i < 6; i++) {
printf("Hello world!\n");
}

这里使用无符号值是完全可以的,因为负值不会永远位于 i 变量内。如果你把 1 加到 7,你会再次得到 0,如果你用 0 减去 1,你会得到 7。

但是当您确实需要负值时,您必须使用有符号整数。然后我们必须将有关值的符号的信息与实际值相匹配值转换为我们可用的 3 位。这可以通过多种方式完成,但要为了简单起见,我们可以使用最左边的位作为符号指示符。当它是零时,该数为正数,为一时,该数为负数。这仅留下 2 位值,现在只能保存 2^2 = 4 值:

000 -> 0

001 -> 1
010 -> 2
011 -> 3

101 -> -1
110 -> -2
111 -> -3

这不是很好的有符号整型表示,通常是其他东西用过的(参见 http://en.wikipedia.org/wiki/Signed_number_representations ),但它显示有符号整数和无符号整数之间的一些基本区别:

无符号整数适合计数,但不适合算术。

有符号整数非常适合算术,但是当用作计数器时,它们只能算到无符号整数范围的一半(因为一位是“浪费”了举牌)。

关于c - 类型大小、Stind.h、有符号和无符号整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25014414/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com