码厨frog 2015-12-29 05:45 采纳率: 0%
浏览 2853
已采纳

一个字节数据存储到四个字节里,高三个字节位里面会是什么?

其实就是这句C语言代码怎么解释:
char c = 128;
printf("%d\n", c); //输出-128
printf("%d\n", 128); //输出128

那个,我的想法是这样的:
Int类型的128的二进制是1000 0000(忽略前面24个0),储存到char类型里面之后不应该还是1000 0000吗?然后用printf输出一个四字节(第二行代码),为什么就变成-128了呢?如果输出的是一个字节,确实1000 0000代表-128。
但,明明写的是printf("%d\n", c); 
是不是因为系统只给c变量分配了1个字节内存,所以printf("%d\n", c);  只能读取内存中的一个字节,而不能按照%d读取4个字节?
  • 写回答

5条回答 默认 最新

  • sinat_17679723 2015-12-29 07:27
    关注

    在回答这个问题前有几个条件需要明确。
    1.计算机内存默认没使用过的是1也就是都是ff保存的。
    2.计算机存储整数时,是按照它的补码存储的。
    首先你申请了一个字节C并给他值128.所以此时计算机內C起始的4个字节是按照下面存储的(假设这块内存根本没用过)
    0000 0001 1111 1111 1111 1111 1111 1111
    当你按照整形去打印的时候,计算机认为是以C为起始地址的一块4字节内存,并不是你说的只有一个字节,但是计算机认为他是补码,将上面的补码还原成原码就是
    0000 0001 0000 0000 0000 0000 0000 0001
    再按照整形数打印出来就是-128.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog