有符号和无符号数的比较

int ia = -1;
unsigned int ua = ia;
if(ia == ua)
 cout << "ia == ua";
else
 cout << "ia != ua";

打印的结果为相等,

当你用一个有符号数和一个无符号数进行比较的时候,是将有符号数转换成无符号数,然后比较大小

short sa = -1;
unsigned short ua = sa;
if(sa == ua)
 cout << "sa == ua" << endl;
else
 cout << "sa != ua" << endl;
输出的是不等,(假设计算机是32位的)

因为short会先转换为int,unsigned short也转换成对应的int,然后再进行比较。

有符号数转换成无符号数就是直接求有符号数的补码:

正数的补码:原码相同。

负数的补码:负数的补码等于其原码的符号位不变,数值部分的各位取反,然后整个数加1。

下题检测:

32 位机上根据下面的代码,问哪些说法是正确的?

1.signed char a = 0xe0;

2.unsigned int b = a;

3.unsigned char c = a;


[size=1em]

 

A. a>0 && c>0 为真 B. a == c 为真 C. b 的十六进制表示是:0xffffffe0 D. 上面都不对

答案选C

。。。。。。。。。。。。。。。。。。。有待补充

 

        

 

 






 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值