Contents

ok这是一个比较简单的问题,但是今天在翻看wiki的时候发现,我通常遇到的整数溢出的题是有无符号的转换导致的上下界溢出
但是还有一个强制转换精度问题我一直没有了解,忽视了,记录一下

例如: long: 0x100000000 -> int: 0x00000000
已经长整型的占有 8 byte 的内存空间,而整型只有 4 byte 的内存空间,所以当 long -> int,将会造成截断,只把长整型的低 4byte 的值传给整型变量。
如果此时再传入一个较大的数据就会造成溢出。

但是当范围更小的变量就能完全的把值传递给范围更大的变量,而不会造成数据丢失。

类型 字节 范围
short int 2byte(word) 0 ~ 32767(0 ~ 0x7fff) // -32768 ~ -1(0x8000 ~ 0xffff)
unsigned short int 2byte(word) 0 ~ 65535(0 ~ 0xffff)
int 4byte(dword) 0 ~ 2147483647(0 ~ 0x7fffffff) // -2147483648 ~ -1(0x80000000 ~ 0xffffffff)
unsigned int 4byte(dword) 0 ~ 4294967295(0 ~ 0xffffffff)
long int 8byte(qword) 正: 0 ~ 0x7fffffffffffffff // 负: 0x8000000000000000 ~ 0xffffffffffffffff
unsigned long int 8byte(qword) 0 ~ 0xffffffffffffffff