c - C 中类型转换丢失的信息
问题描述
#include <stdio.h>
int main(int argc, char const *argv[])
{
int x = 128;
char y = x;
int z = y;
printf("%d\n", z);
return 0;
}
我不明白为什么这个程序打印-128。我试图将 128 转换为二进制基数,但我仍然对 C 编译器如何将 int 转换为 char 和 char 转换为 int 感到困惑。
注意:在我的机器中 sizeof(char) = 1 和 sizeof(int) = 4
解决方案
C 标准没有指定 char 是有符号还是无符号。实际上,为 char 类型分配基本执行字符集之外的值是实现定义的。您可能可以使用宏<limits.h>
来验证。
我怀疑你的系统char
是有符号的,这使得最大值为 127。有符号整数溢出是 undefined。所以不能保证产量。在这种情况下,它看起来像环绕。
推荐阅读
- php - Wordpress:413 请求实体太大
- python - 是否可以从 python 中的用户输入中命名字典?
- c# - 我可以将接口属性创建为通用的吗?
- dendrogram - 基于缠结图中类别的颜色节点
- php - 获取表中行数的更短方法
- java - Spring Boot jpa - 与同一实体的 OneToMany 多重关系
- wordpress - 我的自定义帖子类型帖子显示为找不到页面
- c# - 断点没有停止,如果我注释掉构造函数它会停止并出错
- javascript - How to delete a specific element from an component array?
- c# - 是否有更快的方法来访问由 VSTO/Excel 公开的对象