基本数据类型--有符号数、无符号数及移位


无符号数

 MAX+1->MIN       MIN-1->MAX


无符号与有符号相加减

unsigned int i=5;

int j=-10;

if((i+j)<0)

  printf("true\n");

else

  printf("false\n");

结果:false 

原因: 运算原则:无符号与有符号数进行计算,有符号数会看作无符号数,结果为无符号数

    

printf("%d\n",(i+j))  ;

result:-5

原因:%d将结果以有符号数显示(仅是显示的结果)   %u显示无符号数的结果

移位运算

左移  (逻辑左移,即右边空位补0)

        有符号数在内存中以补码形式存储,所以移动的话会移动符号位

              0x1100 1001  << 2 --> 0x0010 0100


char c=-128;

printf("%d\n",c<<1);

        c为-128,在内存中应该为11000 0000,最高位为符号位,由于char类型只占8位,所以应该是1000 0000,左移1位后按理应为0000 0000,但是结果为-256

      原因:使用%d,打印按照int型打印,int型4字节,可以存放比超过8位的负数

          修改代码如下  

char c=-128;

        c=c<<1;

printf("%d\n",c);

结果为0

右移(对于有符号的数是算术右移,即左边空位补符号位的数)

         0x1100 1001  >> 2 --> 0x1111 0010  


--------------------------------------------------------------------

17-3-8   

移位的数必须为整数类型

char和short隐式转换为int后进行移位操作

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值