ico117 发表于 2020-3-18 10:10:15

不懂就问 为什么这里计算要转为二进制

#include <stdio.h>

int main()
{
      unsigned char a, b, c;

      b = c = 200;//200(10) == 128(10) + 64(10) + 8(10) == 1000 0000(2) + 100 0000(2) + 1000(2) == 1100 1000(2)
      a = b + c;//1100 1000(2) + 1100 1000(2) == 1 1001 0000(2),这里为什么要把十进制转换为二进制再把结果转回十进制?

      printf("a = %u\n", a);

      return 0;
}

墨羽岚 发表于 2020-3-18 10:14:28

本帖最后由 墨羽岚 于 2020-3-18 10:20 编辑

emm其实我没看懂你在说啥{:10_306:}
我记得c语言运行时是以二进制形式运行的(当然也可能是我记错了{:10_264:} )
但是你这题不就是定义两个无符号字符型b,c然后赋值200给它们后相加再赋值给a吗{:10_245:}

一只程序猫 发表于 2020-3-18 10:18:15

没看懂意思{:10_282:}

sunrise085 发表于 2020-3-18 10:29:22

你问的是为什么注释中先将它们转成二进制计算,再转回十进制吗?
这里是为了让你看明白计算的过程,因为unsigned类型是一个字节。a=b+c,运算的结果已经溢出了(最高位的1已经超范围了),所以实际上得到的a=1001 0000(2),而不是1 1001 0000(2)。

对牛弹琴的三高C 发表于 2020-3-18 11:50:14

sunrise085 发表于 2020-3-18 10:29
你问的是为什么注释中先将它们转成二进制计算,再转回十进制吗?
这里是为了让你看明白计算的过程,因为un ...

{:10_288:}
页: [1]
查看完整版本: 不懂就问 为什么这里计算要转为二进制