在 ubuntu 中将数字文字从 64 位编译器转换为 32 位编译器

问题描述 投票:0回答:1

据我所知,在 64 位编译器中,(这取决于编译器)unsigned long long 的最大大小可能类似于 18446744073709551615ull ,所以我尝试搜索并将文字替换为 -1ul 当我希望我的.c程序由32位编译器编译,它确实可以工作,因为它等于2^64并且所有64位都是1,所以32位的表示是-1ul(我认为基于二进制补码)

但是我想知道第 9223372036854775808ull 因为它是 2^(64-1) ,32位文字是什么? -2ul还是1ul???

有人可以向我解释一下这个转换过程吗?不知何故感到困惑...

阿米尔

c bit-manipulation bit bit-shift
1个回答
1
投票

9223372036854775808ull
在十六进制中是
0x8000000000000000
,当你把它放入
0x00000000
类型的变量时,就变成
int32
(最后八位十六进制数字)。

看来您需要学习有关以二进制格式存储数据的基础知识。只需阅读相关的wiki页面和一些文章,并练习手动在不同的表示形式之间转换数字(在纸上)。

© www.soinside.com 2019 - 2024. All rights reserved.