鱼C论坛

 找回密码
 立即注册
查看: 959|回复: 6

[已解决]C语言入门数据在计算机中的存储

[复制链接]
发表于 2020-3-23 14:27:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 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
最佳答案
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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-23 14:34:21 | 显示全部楼层
本帖最后由 ty_xiumud 于 2020-3-23 14:35 编辑

放不了图片???
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-23 15:04:04 | 显示全部楼层
short int类型格式化输出一个是%hd(十进制)    %hx(十六进制)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-23 21:41:23 | 显示全部楼层
sunrise085 发表于 2020-3-23 15:04
short int类型格式化输出一个是%hd(十进制)    %hx(十六进制)

我不来理解的地方是为什么-5的补码形式不是fffb,而是fffffffb??而且这里我定义的为短整型,就是两个byte
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-3-23 22:01:34 | 显示全部楼层
sunrise085 发表于 2020-3-23 21:52
-5,两个字节的补码是fffb,四个字节的补码就是fffffffb。
虽然你定义成短整型,但是你输出的时候用的 ...

对对对!!!感谢,,之前还没注意
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

printf里面的%x,%X 是读入十六进制整数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-15 16:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表