gpt4 book ai didi

c - 带有 unsigned char 的 Mod 运算符

转载 作者:太空狗 更新时间:2023-10-29 14:51:15 24 4
gpt4 key购买 nike

我在使用模运算符时发现了一个非常奇怪的行为。

给定以下代码:

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>

int main()
{
uint8_t x = 2;
uint8_t i;

for(i=0; i<5; i++)
{
x = (x - 1) % 10;
printf("%d ", x);
}

printf("\n");
}

我期望结果是 1 0 3 4 2,但我得到的却是 1 0 255 4 3

我觉得跟积分提升有关系,但是我不明白是怎么转换的

最佳答案

首先,在 C 语言中,% 不是 模运算符。它是余数运算符。

否则,您认为整数提升是正确的。 uint8_t 在作为算术运算符的参数出现时被隐式转换为 int

所以当x达到0时,那么x - 1就会变成-1。然后,-1 % 10 是 -1(不是 9),分配给 uint8_t 的 -1 产生 255(因为无符号整数溢出是根据模运算定义)。

关于c - 带有 unsigned char 的 Mod 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21504263/

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