数字越界分析

针对int 到 ushort的转换 

     [TestMethod]
     public void TestLowUShortBound()
     {
         for (int j = 1; j <= 10; j++)
         {
             ushort res = (ushort)(5 - j);
             Console.WriteLine(res);
         }
         
         /*
            4           0000 0000 0000 0100     
            3           0000 0000 0000 0011     
            2           0000 0000 0000 0010     
            1           0000 0000 0000 0001     
            0           0000 0000 0000 0000     
            65535       1111 1111 1111 1111     => -1的2进制=> 原码  0001 0000 0000 0000 0001 
            65534       1111 1111 1111 1110                   反码  1110 1111 1111 1111 1110
            65533       1111 1111 1111 1101                   补码  1110 1111 1111 1111 1111
            65532       1111 1111 1111 1100           只保留2个字节则为 1111 1111 1111 1111, 负数在计算机中使用补码表示,强转为ushort即为ushort的最大值
            65531       1111 1111 1111 1011               
          */
     }

     [TestMethod]
     public void TestHighUShortBound()
     {
         int ushortVal = 65535 - 5;
         for (int j = 1; j <= 10; j++)
         {
             ushort res = (ushort)(ushortVal + j);
             Console.WriteLine(res);
         }

         /*
            65531
            65532
            65533
            65534
            65535       
            0         65536 =>  0000 1111 1111 1111 1111 + 1
            1                   0001 0000 0000 0000 0000 
            2                   只保留2个字节则为 0000 0000 0000 0000, 强转为ushort即为ushort的最最小值
            3
            4
          */
     }

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值