+ -
当前位置:首页 → 问答吧 → 关于类型转化与整形提升的细节问题

关于类型转化与整形提升的细节问题

时间:2010-07-19

来源:互联网

本帖最后由 glq2000 于 2010-07-19 15:36 编辑
  1. #include <stdio.h>
  2. #include <string.h>



  3. int main()
  4. {
  5.     char a = 256;
  6.     char b = 129;   //char表示范围是-128到127,此时已经溢出了
  7.     char c = -128;
  8.     char d = 128;   //char表示范围是-128到127,此时已经溢出了
  9.     printf("%d %d %d %d %u %u %u \n", a, b, c, d, b, c, d);  // 打印结果是 0 -127 -128 -128 4294967169 4294967168 4294967168
  10.    
  11.    
  12.     unsigned short j = d;
  13.     unsigned k = d;
  14.     printf(" %u %u\n" ,j,  k);  // 这里打印结果是  65408 4294967168  为什么?????????????
  15.     getchar();   
  16.    
  17. }
复制代码
关于如上代码,给char d = 128; 此时d已经溢出了, d的二进制表示是  1000 0000, 这个东西按照%d打印为何是-128?
                 char b = 129;    此时b已经溢出了,b的二进制表示是  1000 0001, 这个东西按照%d打印为何是-127?
                 再就是按照%u打印b c d时,为何都是42亿多。。。。?

作者: glq2000   发布时间: 2010-07-19

char表示范围是-128到127
------ 不一定吧,这取决于编译器,如果你一定要确定范围,那么应该明确写成 signed char 或 unsigned char。char 不一定就是 signed char。

char d = 128; 此时d已经溢出了, d的二进制表示是  1000 0000, 这个东西按照%d打印为何是-128?
----- 那我问你,1000 0000 是不是就是char(-12呢?你说char(-12的二进制值是什么?

char b = 129;    此时b已经溢出了,b的二进制表示是  1000 0001, 这个东西按照%d打印为何是-127?
----- 1000 0001 是不是就是char(-127)呢?你说char(-127)的二进制值是什么?

作者: bruceteen   发布时间: 2010-07-19