ty_xiumud 发表于 2020-3-23 14:27:12

C语言入门数据在计算机中的存储

本帖最后由 ty_xiumud 于 2020-3-23 14:33 编辑

问题叙述
这里我测试时定义变量a为短整型,但输出的结果(十六进制)确是fffffffb,
不是应该是FFFB吗,短整型占两个byte
代码如下
//数据在计算机中的存储方式
#include <stdio.h>
#define DATA 65535
void main()
{
short int a,b;
int c;
printf("int is %d\n",sizeof(int));
printf("short int is %d\n",sizeof(short int));
printf("float is %d\n",sizeof(float));
printf("long int is %d\n",sizeof(long));
printf("unsigned int is %d\n",sizeof(unsigned));       
a = -5;
b= 3;
c=a*b;
printf("a=%d,b=%d,c=%d\n",a,b,c);
printf("a=%x,b=%x,c=%x\n",a,b,c);
}
运行结果
int is 4
short int is 2
float is 4
long int is 4
unsigned int is 4
a=-5,b=3,c=-15
a=fffffffb,b=3,c=fffffff1
Press any key to continue

ty_xiumud 发表于 2020-3-23 14:34:21

本帖最后由 ty_xiumud 于 2020-3-23 14:35 编辑

放不了图片???

sunrise085 发表于 2020-3-23 15:04:04

short int类型格式化输出一个是%hd(十进制)    %hx(十六进制)

ty_xiumud 发表于 2020-3-23 21:41:23

sunrise085 发表于 2020-3-23 15:04
short int类型格式化输出一个是%hd(十进制)    %hx(十六进制)

我不来理解的地方是为什么-5的补码形式不是fffb,而是fffffffb??而且这里我定义的为短整型,就是两个byte

sunrise085 发表于 2020-3-23 21:52:24

ty_xiumud 发表于 2020-3-23 21:41
我不来理解的地方是为什么-5的补码形式不是fffb,而是fffffffb??而且这里我定义的为短整型,就是两个byte

-5,两个字节的补码是fffb,四个字节的补码就是fffffffb。
虽然你定义成短整型,但是你输出的时候用的是%d,这个是整型啊,短整型格式化符号应该是%hd
定义什么类型和输出什么类型可以没关系。你可以看看一下程序的运行结果。
#include <stdio.h>
int main()
{
        int a=67;
        printf("整型输出a:%d\n",a);
        printf("字符类型输出a:%c\n",a);
        printf("十六进制输出a%x\n",a);
        printf("浮点型输出a%f\n",a);
   return 0;
}

ty_xiumud 发表于 2020-3-23 22:01:34

sunrise085 发表于 2020-3-23 21:52
-5,两个字节的补码是fffb,四个字节的补码就是fffffffb。
虽然你定义成短整型,但是你输出的时候用的 ...

对对对!!!感谢,,之前还没注意{:5_109:}

4goodworld 发表于 2020-3-23 22:04:14

ty_xiumud 发表于 2020-3-23 21:41
我不来理解的地方是为什么-5的补码形式不是fffb,而是fffffffb??而且这里我定义的为短整型,就是两个byte

printf里面的%x,%X 是读入十六进制整数
页: [1]
查看完整版本: C语言入门数据在计算机中的存储