疑问:虽然这两个类型占用的字节数相同,假如是4字节,但表达数据范围是不同的,int为[-2的31次方,2的31次方-1],unsigned为[0,2的32次方-1],两种数据类型代表的意思不同,转换过去的值也没有意义了?请高手指点!
13 个解决方案
#1
有些东西就规矩
本身不同类似的数据相运算就容易出现数据错误。
本身不同类似的数据相运算就容易出现数据错误。
#2
显然有问题,int a = -1; UINT(a) = 897***,只要是负数就会出问题,正数没事
#3
整形提升 标准中有很详细的介绍 unsigned long 类型和一个其他类型运算 另一个自动转化unsigned long
否则,long类型和另一个unsigned 类型运算 如果结果能完整表示在long中两 个都转化位long 不能就转化为unsigned long , 否则 一个为long 另一个转化为long 否则一个为unsigned 另一个也转化为unsigned 否则 转化为int
否则,long类型和另一个unsigned 类型运算 如果结果能完整表示在long中两 个都转化位long 不能就转化为unsigned long , 否则 一个为long 另一个转化为long 否则一个为unsigned 另一个也转化为unsigned 否则 转化为int
#4
int 型转换为 unsigned类型,原则是位模式不变,只是解释的方式发生了变化,所以只要int型不是负值,两者转换的结果一样
<深入理解计算机系统>一书说unsigned会有很多陷阱,尽量不要使用
<深入理解计算机系统>一书说unsigned会有很多陷阱,尽量不要使用
#5
正数一般自动转换的数不变,但如果是负数可能会转换成一个很大的正数,估计是因为计算机内部负数用补码表示
#6
规定而已
#7
正数转,绝对没有问题 负数转 绝对有问题
#8
负数转,它的值增加了2的32次方。
#9
结贴吧。
#10
如果你不需要保留符号位的就直接强制转换
需要的话 通过指针
int a = -4;
unsigned int b = *((unsigned int*)&a)
需要的话 通过指针
int a = -4;
unsigned int b = *((unsigned int*)&a)
#11
别取那种边界值就像3楼说的那种,一般没问题
#12
小于int上限的情况下值一致
#13
内存就是字节,4字节摆在那里是不会变的,只是认为的给它一个有符号,无符号,于是那些内存就被当作有符号或者无符号使用了,懂了么。
#1
有些东西就规矩
本身不同类似的数据相运算就容易出现数据错误。
本身不同类似的数据相运算就容易出现数据错误。
#2
显然有问题,int a = -1; UINT(a) = 897***,只要是负数就会出问题,正数没事
#3
整形提升 标准中有很详细的介绍 unsigned long 类型和一个其他类型运算 另一个自动转化unsigned long
否则,long类型和另一个unsigned 类型运算 如果结果能完整表示在long中两 个都转化位long 不能就转化为unsigned long , 否则 一个为long 另一个转化为long 否则一个为unsigned 另一个也转化为unsigned 否则 转化为int
否则,long类型和另一个unsigned 类型运算 如果结果能完整表示在long中两 个都转化位long 不能就转化为unsigned long , 否则 一个为long 另一个转化为long 否则一个为unsigned 另一个也转化为unsigned 否则 转化为int
#4
int 型转换为 unsigned类型,原则是位模式不变,只是解释的方式发生了变化,所以只要int型不是负值,两者转换的结果一样
<深入理解计算机系统>一书说unsigned会有很多陷阱,尽量不要使用
<深入理解计算机系统>一书说unsigned会有很多陷阱,尽量不要使用
#5
正数一般自动转换的数不变,但如果是负数可能会转换成一个很大的正数,估计是因为计算机内部负数用补码表示
#6
规定而已
#7
正数转,绝对没有问题 负数转 绝对有问题
#8
负数转,它的值增加了2的32次方。
#9
结贴吧。
#10
如果你不需要保留符号位的就直接强制转换
需要的话 通过指针
int a = -4;
unsigned int b = *((unsigned int*)&a)
需要的话 通过指针
int a = -4;
unsigned int b = *((unsigned int*)&a)
#11
别取那种边界值就像3楼说的那种,一般没问题
#12
小于int上限的情况下值一致
#13
内存就是字节,4字节摆在那里是不会变的,只是认为的给它一个有符号,无符号,于是那些内存就被当作有符号或者无符号使用了,懂了么。