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

其实就是这句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个字节?

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

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

全部都是0。

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

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