码厨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条)

报告相同问题?

悬赏问题

  • ¥100 有人会搭建GPT-J-6B框架吗?有偿
  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名