c - 在 C 中后/前递减 char 变量时这里发生了什么

标签 c char

<分区>

我正在解决一本书中的一些多项选择 C ​​代码。其中两个问题涉及前递减,后递减初始化为 0 的 char 变量。这两个问题的输出非常不同。我不明白那里发生了什么。

代码 1

char i=0;
do
{
    printf("%d ",i);
}while(i--);
return 0;

此代码段的输出为 0。

代码 2

char i=0;
do
{
    printf("%d ",i);
}while(--i);
return 0;

这个的输出是
0,-1,-2,.......-128,127,126,......1 .

谁能解释为什么会这样?

最佳答案

在两个代码 while 循环检查 i==0 与否。如果 i!=0 它将继续进行。

i 的第一个代码值最初是 0。所以在打印 0 之后,它会检查 i==0 是否。如果 i==0 它将中断循环或通过递减 i 继续进行。所以在代码 1 中使用了递减。 先检查值然后递减值

i 的第二个代码值最初是 0。所以在打印 0 之后它递减 i 然后它检查是否 i==0 。它是预递减的。 先减值再校验。

这里,ichar,大小是1字节,范围是-128到127。因此,在将值 0 递减到 -1 之后,它会一直递减,直到它变为 0 并通过打印 0,-1,.. 退出循环。 .,-128,127...1 。

关于c - 在 C 中后/前递减 char 变量时这里发生了什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53425278/

相关文章:

c - 在 c 中使用 sscanf 的正则表达式忽略空格

c - (void*) ptr == ptr 总是为真吗?

有符号十进制数的 char* 到 2s 补码二进制表示的 char*?

c - 防止链表中的 char * 改变

c++ - 为什么 cout 一个简单的 char* 不起作用?

java - 我做了一个 for 循环来交换字符串中的两个 indiv char 变量

c++ - 为什么 int 的大小在某些编译器中会有所不同?

c - 如何在 C 函数中接收 char 数组?

c - 测量 MSP430 引脚上的时钟频率

c - 如何在c中实现包含书名的数组中的搜索