c - c 中指针的 int,unsigned int 类型转换
问题描述
我是 C 中指针的新手。请帮助我使用以下代码:
void main()
{
int i=3;
printf("unsighed Address of i = %u \n",(unsigned int)&i);
printf("int Address of i = %d\n",(int)&i);
printf("pointer Address of i = %p\n",&i);
printf("Value of i = %d\n",i);
}
输出:
unsighed Address of i = 3219915640
int Address of i = -1075051656
pointer Address of i = 0xbfec0378
Value of i = 3
如您所见,我只是在检查i
through int
、unsigned int
和 pointer 的地址。无符号值和指针值相同(base16 的 0xbfec0378 = base10 的 3219915640)。但整数值不同。int 范围是(-32768 到 32767)。所以我不知道我是怎么得到-1075051656的。你能解释一下吗。
解决方案
你的基地在哪里int range is (-32768 to 32767)
?这意味着大小为 2 个字节。我不认为是这样,因为-1075051656
是int
(您将地址转换为int
)。
要检查int
use的大小sizeof(int)
,或查找它表示的值的区间,请使用INT_MIN, INT_MAX
常量。
您系统中的大小int
可能是 4 个字节(32 位),间隔-2147483648
为2147483647
. 有了unsigned int
它来自0 to 4,294,967,295
.
因此,您可以使用 打印该值unsigned int
,但在转换为int
since 时会溢出4294967295 > 3219915640 > 2147483647
推荐阅读
- firebase - firebase 托管多个站点配置 .firebaserc 文件
- qt - 如何在没有固定大小的布局中省略文本项?
- server - HTTP 状态 500 - 内部服务器错误 RapidClipse
- python - Django为不同的用户添加多个数据库名称
- java - 在 Java 中将 BigDecimal 字段作为 JSON 字符串值返回
- reactjs - TypeError:无法读取未定义的 React Native Redux 的属性“地图”
- azure - 使用 VSTS 和 Azure 时正确管理应用程序设置
- mysql - DB2 到 SQL 的迁移
- php - 使用多个收件人时,根据 Laravel 电子邮件的收件人不同的视图数据
- android - 在android listview中设置项目的背景颜色