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:35 编辑
放不了图片??? short int类型格式化输出一个是%hd(十进制) %hx(十六进制) sunrise085 发表于 2020-3-23 15:04
short int类型格式化输出一个是%hd(十进制) %hx(十六进制)
我不来理解的地方是为什么-5的补码形式不是fffb,而是fffffffb??而且这里我定义的为短整型,就是两个byte 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;
} sunrise085 发表于 2020-3-23 21:52
-5,两个字节的补码是fffb,四个字节的补码就是fffffffb。
虽然你定义成短整型,但是你输出的时候用的 ...
对对对!!!感谢,,之前还没注意{:5_109:} ty_xiumud 发表于 2020-3-23 21:41
我不来理解的地方是为什么-5的补码形式不是fffb,而是fffffffb??而且这里我定义的为短整型,就是两个byte
printf里面的%x,%X 是读入十六进制整数
页:
[1]