关于unsigned 的算术转换

#include <stdio.h>

 

 

int main()

{

 

 

         int i = 1;

         unsigned int j = -1;

 

         int kk = i + j;

         unsigned  int kkk = i + j;

 

         printf("%d                  %u\n", kk, kkk);

 

         if(-1 < (unsigned char)1)

         {

                   printf("-1 < 1\n");

         }

         else

         {

                   printf("-1 > 1\n");

         }

 

 

         if(i < j)

         {

                   printf("1 < -1\n");

         }

         else

         {

                   printf("1 > - 1\n");

         }

 

         return 0;

}

 

VS2010输出结果如下:

0                0

-1 < 1

1 < -1

 

因为在执行算术运算时,操作数的类型如果不同,就会发生转换。

1.浮点类型朝着精度更高,长度更长的方向转换,如float转换为double

2.整型数如果转换为signed不丢失信息,就转换为signed,否则转换为unsigned。但在K&R C采用了无符号保留原则,即只要是无符号与有符号混合使用,结果就是无符号类型。

3.在signed int 和 unsigned int 之间做测试相等性,signed int 自动升级为unsigned int类型,所最后会出现1 < -1的情况

转载于:https://www.cnblogs.com/to-be-st/archive/2012/12/10/2811796.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值