什么是char i = 0x80,为什么在位移中没有发生溢出

这是一个程序
#include <stdio.h>
main()
{ unsigned char i=0x80;
printf("i=%d",i<<1);
}

它的输出是256.
我不清楚是什么

unsigned char i=0x80; <-- i is not int it is char so what will it store?

我知道位移和十六进制的东西.
我正在存储的值如何变化到256?

UPDATE

当位移操作发生时为什么不发生溢出?

解决方法

在C中,char是用于存储字符数据的整数类型,通常为1字节.

存储在i中的值为0x80,等于128的十六进制常数.

对于两种整数类型(例如i <1)的算术运算将促进为更广泛的类型,在这种情况下为int,因为1是int常量.在任何情况下,整数函数参数被提升为int. 然后将结果发送到printf,并使用%d格式说明符,这意味着“打印整数”.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...