int与uint转换过程中值的变化
2010-02-02 20:37
190 查看
int类型的数据转化为uint类型:
因为int是带符号的类型,当int是正数时,int类型数据转化为uint时不发生改变。
当int是负数时,int类型数据转化为uint类型时,值就要发生变化。
但转化的过程并不是去掉前面的负号,例如
int a=-1;
uint b=(uint)a;
这时b的结果并不是1;而是4294967295;
我们知道在计算机中存储数据都是用补码来存储的,int的大小是4个字节,也就是32位,并且第一位是符号位;
而uint的大小同样是4个字节,32位,但没有符号位。
所当int a=-1;在计算机中存储的是补码:1111 1111 1111 1111;第一位是符号位。
执行uint b=(uint)a;转化为uint类型时,存储的依然是补码:1111 1111 1111 1111;没有符号位。
这时值就变成了4294967295。
程序:
static void Main(string[] args)
{
//计算int类型的最大值与最小值
int a=1,sum=0;
for (int i = 0; i <= 30; i++)
{
sum += a;
a *= 2;
}
Console.WriteLine("int类型的最大值为:"+sum);//0111 1111 1111 1111 结果为2147483647
sum++;
Console.WriteLine("int类型的最小值为:"+sum);//1000 0000 0000 0000 结果为-2147483648
}
因为int是带符号的类型,当int是正数时,int类型数据转化为uint时不发生改变。
当int是负数时,int类型数据转化为uint类型时,值就要发生变化。
但转化的过程并不是去掉前面的负号,例如
int a=-1;
uint b=(uint)a;
这时b的结果并不是1;而是4294967295;
我们知道在计算机中存储数据都是用补码来存储的,int的大小是4个字节,也就是32位,并且第一位是符号位;
而uint的大小同样是4个字节,32位,但没有符号位。
所当int a=-1;在计算机中存储的是补码:1111 1111 1111 1111;第一位是符号位。
执行uint b=(uint)a;转化为uint类型时,存储的依然是补码:1111 1111 1111 1111;没有符号位。
这时值就变成了4294967295。
程序:
static void Main(string[] args)
{
//计算int类型的最大值与最小值
int a=1,sum=0;
for (int i = 0; i <= 30; i++)
{
sum += a;
a *= 2;
}
Console.WriteLine("int类型的最大值为:"+sum);//0111 1111 1111 1111 结果为2147483647
sum++;
Console.WriteLine("int类型的最小值为:"+sum);//1000 0000 0000 0000 结果为-2147483648
}
相关文章推荐
- int与uint类型之间转换过程中值的变化
- int与uint转换过程中值的变化
- 存储过程传递参数时出现类型转换错误!如:varchar转换为int时出错
- c++error:C2664“intCWnd::MessageBoxW(LPCTSTR,LPCTSTR,UINT)”: 无法将参数 1 从“const char [12]”转换为“LPCTSTR”
- swift Int,Int32,UInt的转换
- 考察二进制向int或uint转换时的最高位处理
- 存储过程,从数据类型 nvarchar 转换为 int 时出错
- 佩特来项目经验小集合(2)___组合查询存储过程,报错 "varchar JBID='' 转换成数据类型 int 时失败"
- SQL把表中某字段的所有值(字符串转换成int)
- Android中 int 和 String 互相转换的多种方法
- 将int[]数组转换为字符串
- VC++中CString与int互相转换
- Java int 类型向String转换
- (SQL)将 expression 转换为数据类型 int 时发生算术溢出错误 2种快速处理方法
- C++ 模板类型推导过程中的隐式类型转换
- C# int 类型在32/64位环境下取值范围无变化
- PHP中intval()等int转换时的意外异常情况解析
- c#中从string数组转换到int数组
- Oracle SQL3-过程思维转换为集合思维
- Java中String 转换 int