n-bit整数的最大值是2 n -1.为什么我们有"减1"?为什么最大只有2 n?
首先,这个问题有相关帖子: 为什么Int32最大值是0x7FFFFFFF?
但是,我想知道为什么十六进制值始终被视为无符号数量.
请参阅以下代码段:
byte a = 0xFF; //No error (byte is an unsigned type).
short b = 0xFFFF; //Error! (even though both types are 16 bits).
int c = 0xFFFFFFFF; //Error! (even though both types are 32 bits).
long d = 0xFFFFFFFFFFFFFFFF; //Error! (even though both types are 64 bits).
Run Code Online (Sandbox Code Playgroud)
出错的原因是因为十六进制值始终被视为无符号值,无论它们存储的数据类型如何.因此,对于所描述的数据类型,该值"太大".
int c = 0xFFFFFFFF;
Run Code Online (Sandbox Code Playgroud)
存储值:
-1
Run Code Online (Sandbox Code Playgroud)
而不是价值:
4294967295
Run Code Online (Sandbox Code Playgroud)
仅仅因为int是签名类型.
我怎么能存储这些位转换成这些数据类型,而不诉诸使用ushort,uint和ulong?
特别是,long考虑到我不能使用更大的签名数据类型,我怎样才能实现数据类型?