u013115078
码厨frog
采纳率100%
2015-12-29 05:45

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

1
已采纳

其实就是这句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 sinat_17679723 6年前

    在回答这个问题前有几个条件需要明确。
    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.

    点赞 2 评论 复制链接分享
  • caozhy 从今以后生命中的每一秒都属于我爱的人 6年前

    如果是有符号的,并且是负数,前面填1。

    点赞 2 评论 复制链接分享
  • caozhy 从今以后生命中的每一秒都属于我爱的人 6年前

    全部都是0。

    点赞 2 评论 复制链接分享
  • tookkke tookkke 6年前

    char 类型是-128 ~ 127,溢出了吧
    改成unsigned char 就会是128了

    点赞 2 评论 复制链接分享
  • zhenhua_329 「已注销」 6年前

    楼主意思这里面是强制类型转换,char 转为int,高位填充符号位

    点赞 评论 复制链接分享

相关推荐