这个while循环为什么是这样的
#include <stdio.h>
int main()
{
signed char i = 0;
while (i <= 0)
{
printf("%d", i);
i = i - 1;
}
return 0;
}
为什么这个程序执行出来是0~128啊,我寻思着它的i不是越来越少吗
大佬们解决一下!!! {:10_285:} 继续往下学把
学到数据的存储你就理解了 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)停止循环
能看懂就看懂,看不懂就等你学到数据的存储就懂了 说实话,我只能看懂一点点,不能懂多了,比如你那个-1化二进制我知道,但是怎么化成127的我就不知道了,不过还是听大佬的吧,等时侯,一定懂
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了就是变正数了
是不是编译器的缘故,我复制了你的程序,在DEV C++就是0到-128。结果是0-1-2-3-4-5-6-7-8-9……-128.数之间是负号。
页:
[1]