鱼C论坛

 找回密码
 立即注册
楼主: 11063216906

[已解决]浮点数存取问题

[复制链接]
 楼主| 发表于 2026-8-9 20:37:58 | 显示全部楼层
FishC 发表于 2026-8-9 19:49
1111 1101 按补码解释,十进制是 **-3**。

计算方法(权重法):
  1. #include <stdio.h>

  2. int main()
  3. {
  4.         int a = 1, b = 2;

  5.         a = 0 && 1 = b;

  6.         return 0;
  7. }
复制代码

为啥会报错
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2026-8-9 20:38:12 | 显示全部楼层
11063216906 发表于 2026-08-09 20:37
FishC 发表于 2026-8-9 19:49
1111 1101 按补码解释 ...


这是因为C语言的**运算符优先级**导致的。

0 && 1 = b 中,逻辑与 && 的优先级**高于**赋值运算符 =,所以编译器会把它解析为:

  1. (0 && 1) = b
复制代码


(0 && 1) 是一个表达式的结果(值为0),**不是可修改的左值**,不能放在赋值符号左边。因此编译器报错。

即使你加括号写成 0 && (1 = b)1 = b 也是非法的,因为 1 是常量,同样不是左值。

简单记:赋值运算符左边一定要是变量,不能是表达式结果或常量。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2026-8-10 22:20:45 | 显示全部楼层
FishC 发表于 2026-6-20 11:20
确实不是这样。让我用通俗的方式帮你理清浮点数的实际存储机制。

首先,float 类型在内存中占用固定的32 ...
  1. while ((ch = getchar()) == ' ')
  2.         ;
复制代码


如果用这种方式相当于略去了空格
那我在后面再次调用getchar的时候是直接获得空格之后的内容吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2026-8-10 22:20:54 | 显示全部楼层
11063216906 发表于 2026-08-10 22:20
FishC 发表于 2026-6-20 11:20
确实不是这样。让我用 ...


不是的。这个循环退出时,已经读取了一个**非空格字符**,并且这个字符保存在 `ch` 中。如果你后面再次调用 `getchar()`,它会读取**这个非空格字符之后的下一个字符**,而不是返回当前这个非空格字符。

例如输入 `"  A B"`:
- 第一次 `getchar()` 读到空格,循环继续
- 第二次读到空格,循环继续
- 第三次读到 `'A'`,不是空格,循环退出
- 此时 `ch` 等于 `'A'`
- 如果你再调用 `getchar()`,得到的是 `' '`(空格),而不是 `'A'`

如果你希望后面直接使用这个非空格字符,应该使用 `ch` 变量,而不是再次 `getchar()`。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 6 天前 | 显示全部楼层
FishC 发表于 2026-8-10 22:20
不是的。这个循环退出时,已经读取了一个**非空格字符**,并且这个字符保存在 `ch` 中。如果你后面再次 ...

what's EOF
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 6 天前 | 显示全部楼层
11063216906 发表于 2026-08-14 21:54
FishC 发表于 2026-8-10 22:20
不是的。这个循环退出 ...


EOF 是 End Of File(文件结束)的缩写,在 C 语言中它代表“输入结束”或“读取失败”的标志。  

它通常被定义为 **-1**,在 stdio.h 头文件中声明。  

getchar() 返回类型是 int,当它读到文件末尾或遇到错误时,就会返回 EOF。比如从键盘输入时,在 Windows 下按 Ctrl+Z 再回车,在 Linux/Mac 下按 Ctrl+D,getchar() 就会返回 EOF。  

常见用法:  

  1.   
  2. int ch;  
  3. while ((ch = getchar()) != EOF) {  
  4.     // 循环读取字符,直到输入结束  
  5. }  
复制代码


注意:必须用 int 类型保存 getchar() 的返回值,不能用 char。因为 char 可能无法正确表示 EOF(即 -1),导致判断失效。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-8-20 22:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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