鱼C论坛

 找回密码
 立即注册
查看: 3739|回复: 16

[已解决]关于运算符的问题

[复制链接]
发表于 2023-2-4 20:46:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
当z--的值为0的时候,再判断z--的值是某为真还是会再--吗?
之前论坛有大佬给我讲了副作用和顺序点,但是我还能没能get到它的意思,while语句这里好像没有顺序点,z的--是什么时候发生的呢

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main(void)
  4. {
  5.     int z = 2;
  6.     while (z--)
  7.     {
  8.         printf("z=%d\n", z);
  9.     }
  10.     printf("z=%d\n", z);
  11.     system("pause");
  12.     return 0;
  13. }
复制代码
最佳答案
2023-2-5 09:48:40
本帖最后由 两手空空儿 于 2023-2-5 10:09 编辑
  1. while (z--)
  2.     {
  3.         printf("z=%d\n", z);
  4.     }

  5. 等效如下
  6. int temp = z;
  7. z--;
  8. while (temp)
  9.     {
  10.         printf("z=%d\n", z);
  11.     }

  12. 后--运算的时候,编译器会先copy 一个副本,然后--,用副本参加运算
  13. 前--是直接--
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-2-4 20:48:31 | 显示全部楼层
我好像总是理解成z的值不为0了就不会执行整个while循环了,但是实际是还是执行了第六行,然后z--再跳过while循环吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-4 20:49:17 | 显示全部楼层
然后最二个printf那里我以为会打印0
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-5 15:04:21 | 显示全部楼层
人造人 发表于 2023-2-5 10:51
a = ++b;
    112b:        83 45 fc 01                  addl   $0x1,-0x4(%rbp)
    112f:        ...


大佬我看不懂这些,呜呜呜,因为考试只考c语言和数据结构我目前就只学了c语言和数据结构
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-5 15:05:19 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-5 15:14:58 | 显示全部楼层
人造人 发表于 2023-2-5 15:07
哪里看不懂?
addl   $0x1,-0x4(%rbp)
给b的值加1,看不懂?

说实话全部都没看懂,从说是汇编语言指令后面就看不懂了
长图_2023-02-05.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-5 15:50:15 | 显示全部楼层
人造人 发表于 2023-2-5 15:30
int a = 1;
    111d:        c7 45 f8 01 00 00 00         movl   $0x1,-0x8(%rbp)


就是int a=1;这些我懂,然后其余的像是
111d:        c7 45 f8 01 00 00 00         movl   $0x1,-0x8(%rbp)

movl   $0x1,-0x8(%rbp)
这些就没看懂了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-5 16:10:12 | 显示全部楼层
人造人 发表于 2023-2-5 16:08
movl   $0x1,-0x8(%rbp)
其他不用管,就看这个就可以了
movl一条指令

懂了懂了,我说怎么根本看不懂
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-10-7 03:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表