考虑以下清单: 它与 GCC 和 Clang 编译得很好。我对operator<<(uint8_t, uint32_t)很困惑。 为什么结果被签名? ...
考虑以下清单: 它与 GCC 和 Clang 编译得很好。我对operator<<(uint8_t, uint32_t)很困惑。 为什么结果被签名? ...
我正在学习 C 和 integer 提升和降级这个词对我来说是新的。 我在 C Standard (C17) 中读到了关于 C 类型转换和 integer 提升的信息,但我不知道如何识别 integer 提升,我对降级一无所知。 例如,如果我有这些代码行: 哪里有integer促销? 因为据我所知 ...
我正在努力实现在其 integer 部分中设置值 1 的有符号 long long int 变量。 查看带有有符号 long int 变量的 16.16 实现,它的工作原理如下: 这导致以下表示: 0001.0000 不幸的是,我无法让它在 32.32 表示中工作: 我收到以下 gcc 警告: wa ...
int main(){ char a = 5 + (16711935 * 1200); return 0; } 根据integer 文字的类型和 C中的转换规则, 16711935是 int 类型, 1200被提升为 int。 我的问题是这个乘法的中间结果在它被添加到 5 然后转换为 char ...
在 C 中,我了解标准类型的类型转换、integer 提升、转换等,但是 stdint.h 类型如何影响这一点? 对于类型排名,规则 state: 任何两个带符号的 integer 类型都不应具有相同的等级,即使它们具有相同的表示形式。 任何无符号 integer 类型的等级应等于相应有符号 in ...
我有以下代码,我不清楚其中的行为。 有人可以帮助条件运算符如何评估以下代码和 output ans 作为 1 #包括 Soemone 能否请帮助如何评估代码“delayMessages += Delay?1:-1;” ...
C11 标准将_Bool类型(6.2.5.2)定义为标准无符号 integer 类型(6.2.5.6),当我阅读标准时, _Bool也是一种算术类型(6.2.5.18 通过 6.2.5.7 和 6.2.5.17) . 此外,指定对于+和- “两个操作数都应具有算术类型,或者一个操作数应是指向完整 ...
我有一个巨大的整数数组,这些整数不大于0xFFFF 。 因此,我想节省一些空间并将它们存储为unsigned short 。 后来我会使用这个数组如下 当我只使用 2 个字节来存储我的整数时,它们在用作数组索引时被提升为 4 个或 8 个字节(取决于架构)。 速度对我来说非常重要,因此我是否应该将整 ...
我需要帮助解决这个问题,所以如果有人遇到类似的问题,它会对我有很大帮助。 为什么输出是101? ...
为什么在使用 %d 时在第二个 printf 中我没有得到 -1? ...
为什么int hum2()函数返回布尔类型? 函数不应该返回我定义的类型。 就像 Float 函数返回浮点值一样,Double 函数返回一个双精度值。 ...
代码片段 1(如下所示)产生以下 -Wconversion 警告: 代码片段 2 和 3 不会产生 -Wconversion 警告。 代码片段 1: 代码片段 2: 代码片段 3: 为什么第一个代码片段会产生警告,而其他代码片段不会? 导致警告的具体原因是什么? 我觉得这很令人困 ...
在可变参数函数中,会发生默认参数提升。 6.5.2.2.6 如果表示被调用函数的表达式的类型不包含原型,则对每个参数执行整数提升,而float类型的参数提升为double 。 这些称为默认参数提升。 [...] 6.5.2.2.7 [...] 函数原型声明符中的省略号会导致参数类 ...
给定一个 C 函数(随机示例): 使用unsigned char是通过告诉编译器传递的值的限制来帮助编译器,还是通过阻止编译器使用本机int (或unsigned int )大小来阻碍编译器? 我知道历史上使用short并不理想,因为 16 位操作不是原生的。 我不知道这是否适用于这里(或一般 ...
我正在阅读一些实现简单解析器的代码。 名为scan的 function 将一行分解为标记。 scan有一个 static 变量bp ,它分配了要标记的行。 在赋值之后,空白被跳过。 见下文。 我不明白的是为什么代码会按位和bp指向的字符0xff ,即* bp & 0xff的目的是什么? ...
我认为以下代码可能会导致溢出,因为a * 65535大于unsigned short int可以容纳的值,但结果似乎是正确的。 C 中是否有一些内置机制将中间算术结果存储在更大的数据类型中? 或者它是一个意外? ...
考虑以下:unsigned int i1 = 0xFFFFFFFF; unsigned char c1 = i1; char c2 = i1; printf("%x\n", i1); // 0xFFFFFFFF as expected printf("%x\n", ...
在这种情况下, printf 中的参数-a通过一元减号运算符的printf提升提升为int ,随后通过默认参数提升提升,最后通过格式说明符转换为unsigned char 。 所以-a => -(int)a (by ~ ) => function call => (unsigne ...