(int)0x80000000 get error

Error: Constant value '2147483648' cannot be converted to a 'int' (use 'unchecked' syntax to override)

Reason:

计算机在内部用的是补码, 所以:

byte类型的范围:(负数最小值,1既是符号位又是值位)
Dec:             -128                              -1                              0                              127
Bin:          1000 0000                  1111 1111             0000 0000                   0111 1111

32位Int类型范围:
Dec:       -2147483648                     -1                            0                            2147483647               
Hex:       0x80000000              0xFFFFFFFF              0x00000000                  0x7FFFFFFF

我们在程序中用 (int)0x80000000, 编译器看来它需要做的是 把  2147483648 转化为 Int
OVERFLOW!     

 

-----------------------------------------------
偶然发现我以前也注意到了这个问题了:
唉,总是容易忘记
          

//      firstly,I use INFINITE=0xFFFFFFFF, error:  Cannot implicitly convert type 'uint' to 'int'
//      then, I use INFINITE=(int)0xFFFFFFFF, error: Constant value '4294967295' cannot be converted to a 'int' (use 'unchecked' syntax to override)
                                                     // because, 0xFFFFFFFF changed to Int, will overflow, so it must in unchecked()
//      so, this is correct:  INFINITE = unchecked((int)0xffffffff)

//      And then, 0xffffffff equivals to -1 in decimal when we are representing a 4 byte signed integer value.
//      So, the smartest solutions is: INFINITE = -1;
public const Int32 INFINITE = -1;

转载于:https://www.cnblogs.com/DylanWind/archive/2010/08/19/1803573.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值