鱼C论坛

 找回密码
 立即注册
查看: 1692|回复: 6

[已解决]这个while循环为什么是这样的

[复制链接]
发表于 2021-3-14 15:37:24 | 显示全部楼层 |阅读模式

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

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

x

#include <stdio.h>

int main()
{
        signed char i = 0;

        while (i <= 0)
        {
                printf("%d", i);
                i = i - 1;
        }

        return 0;
}
为什么这个程序执行出来是0~128啊,我寻思着它的i不是越来越少吗
大佬们解决一下!!!
最佳答案
2021-3-14 16:10:28
char 存储8个比特位
signed char说明首位是符号位
整数存储方式都是补码——正数反码,补码,原码都相同
—————————————负数 例子-1  原码1000 0001(首位代表符号位1为负 0为正)   反码首位不变其他位取反 1111 1110   补码是在反码的基础上加1,即为 1111 1111


0-1=1111 1111 (-1)
   ………………
1000 0001-1=1000 0000 (-128)
1000 0000 -1=0111 1111 (127)停止循环


能看懂就看懂,看不懂就等你学到数据的存储就懂了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-3-14 15:39:51 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-3-14 15:42:34 | 显示全部楼层
继续往下学把
学到数据的存储你就理解了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-14 16:10:28 | 显示全部楼层    本楼为最佳答案   
char 存储8个比特位
signed char说明首位是符号位
整数存储方式都是补码——正数反码,补码,原码都相同
—————————————负数 例子-1  原码1000 0001(首位代表符号位1为负 0为正)   反码首位不变其他位取反 1111 1110   补码是在反码的基础上加1,即为 1111 1111


0-1=1111 1111 (-1)
   ………………
1000 0001-1=1000 0000 (-128)
1000 0000 -1=0111 1111 (127)停止循环


能看懂就看懂,看不懂就等你学到数据的存储就懂了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-14 19:19:21 | 显示全部楼层
说实话,我只能看懂一点点,不能懂多了,比如你那个-1化二进制我知道,但是怎么化成127的我就不知道了,不过还是听大佬的吧,等时侯,一定懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-14 19:55:13 | 显示全部楼层
hujiezhong 发表于 2021-3-14 19:19
说实话,我只能看懂一点点,不能懂多了,比如你那个-1化二进制我知道,但是怎么化成127的我就不知道了,不过还 ...

1000 0000是-128,这个没办法用原码反码解释,就是-128的补码
1000 0000-1就变成0111 1111了
首位是符号位0代表正数 111 1111是127的二进制即0111 1111是+127


概括一句话就是把首位的1借下来了变0了就是变正数了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-15 18:03:57 | 显示全部楼层
是不是编译器的缘故,我复制了你的程序,在DEV C++就是0到-128。结果是0-1-2-3-4-5-6-7-8-9……-128.数之间是负号。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-22 07:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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