Chinaunix首页 | 论坛 | 博客
  • 博客访问: 213187
  • 博文数量: 30
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 476
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-07 18:15
个人简介

程序员一个。14年毕业。

文章分类

全部博文(30)

文章存档

2014年(13)

2013年(17)

我的朋友

分类: LINUX

2013-11-21 21:53:18


今天碰到一个问题,以为是bug,后来才发现不是bug。只是代码写的傻X而已。


点击(此处)折叠或打开

  1. #define erroe -1


  2. int func()
  3. {
  4.     return -1;
  5. }
  6. int main()
  7. {
  8.     unsigned int b = func();
  9.     if(error == b)
  10.     {
  11.         //觉得永远不会执行,是bug。其实不是bug。这里的代码照样可以执行
  12.     }
  13. }
如果编译时,加上适当的编译选项,会出现warning :comparison between signed and unsigned
为什么会执行 ?b难道不是永远不可能为负数吗?
非也。

理解1:“==”的右值会非显示的转成左值类型。

理解2:signed / unsined 是程序员可见的,程序员的思维限制的一种形式。而对于内存,对于cpu,就是一个东西,一堆4字节大小的二进制数
signed int  a = B 1111 1111;
unsigned int b = (unsigned int )a      只是告诉编译器,把a最高位当成符号位,也就是程序员麻痹自己说,两者不一样,但是对于内存而言,两者都是8个1。




阅读(1849) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~