lililizhi 发表于 2019-10-13 18:59:49

c语言

#include<stdio.h>

void main()
{
   char a;
   a=129;
   
   
        printf("%d",a);
}
结果是-127,为什么不是129,char不是8位可以存储129吗

5281 发表于 2019-10-13 19:05:39

char 定义字符变量。怎么能输出整数呢?

7-矩阵革命 发表于 2019-10-13 19:17:06

楼主。
signed char 8位存储范围为 -128 ~ 127
范围计算过程为补码形式,最高位为符号位。
1 1111111 : 2^7 =128最高符号位为1 所以最小为-128 ,0 1111111:2^7 = 128-1 = 127 最高符号位为0所以最大为127。

jackz007 发表于 2019-10-13 19:20:06

本帖最后由 jackz007 于 2019-10-13 19:28 编辑

      char 的数值范围是 -128 ~ 127,对应十六进制 0x00 ~ 0xff,其中,0x00 ~ 0x7f 对应于十进制 0 ~ 127,0x80 ~ 0xff 对应于十进制 -128 ~ -1,楼主赋值的整型数 129 表达成 char 就是 0x81,而 char 类型的 0x81 就是 -127,除非楼主用 unsigned char a 来定义变量 a。因为 unsigned char 可表达数值的范围是 0 ~ 255,涵盖了数值 129。

#include <stdio.h>

main()
{
      unsigned char a = 129 ;
      printf("%d\n" , a)    ;
}

7-矩阵革命 发表于 2019-10-13 19:21:18

5281 发表于 2019-10-13 19:05
char 定义字符变量。怎么能输出整数呢?

%d会输出该字符对应的编码
具体可以看看ASCII表

7-矩阵革命 发表于 2019-10-13 19:26:43

5281 发表于 2019-10-13 19:05
char 定义字符变量。怎么能输出整数呢?

不好意思 看错了。。
页: [1]
查看完整版本: c语言