Chinaunix

标题: pmerofc进来,帮看一个问题 [打印本页]

作者: 群雄逐鹿中原    时间: 2010-06-13 22:49
标题: pmerofc进来,帮看一个问题
能打出OK不能?刚才试验了一下,把自己搞糊涂了

  1.     unsigned char a = (unsigned char)-3;
  2.     unsigned char b = (unsigned char)0;
  3.     if((~a) >= b)
  4.     {
  5.          printf("OK\n");
  6.     }
复制代码

作者: pmerofc    时间: 2010-06-13 22:53
提示: 作者被禁止或删除 内容自动屏蔽
作者: 群雄逐鹿中原    时间: 2010-06-13 22:55
请你从标准上分析一下   别人不好这口啊
作者: pmerofc    时间: 2010-06-13 22:59
提示: 作者被禁止或删除 内容自动屏蔽
作者: 群雄逐鹿中原    时间: 2010-06-13 23:03
还挺矜持。。。。不打口水仗。  从原理上解释一下吧
作者: pmerofc    时间: 2010-06-13 23:08
提示: 作者被禁止或删除 内容自动屏蔽
作者: pmerofc    时间: 2010-06-13 23:54
提示: 作者被禁止或删除 内容自动屏蔽
作者: 群雄逐鹿中原    时间: 2010-06-14 00:07
不错,今天搞清了一个错误。不赔你浪费时间了。
作者: zhaohongjian000    时间: 2010-06-14 10:29
我擦,竟然不能?哪位前辈讲讲?
作者: churchmice    时间: 2010-06-14 17:01
回复 9# zhaohongjian000

integer promotion
见这个帖子http://bbs.chinaunix.net/thread-1721752-1-1.html

具体的来说就是~a这一步会首先将a promote成一个int型(该int型的16进制为0x000000fd,因为a是unsigned,所以不会进行高位符号扩展),你再进行~a操作结果就是一个负数了

同理,右边的b也会进行integer promotion,不过promote出来的结果是0罢了
作者: tpli    时间: 2010-06-14 17:13
到底会不会啊。
作者: zhaohongjian000    时间: 2010-06-14 18:03
回复  zhaohongjian000

integer promotion
见这个帖子

具体的来说就是~a这一步会首先将a promote成 ...
churchmice 发表于 2010-06-14 17:01



    明白了,按位取反之后的结果不是仍然当做unsigned的来处理的。
作者: 单眼皮大姐    时间: 2010-06-15 00:25
回复 12# zhaohongjian000


    那当作什么类型来出里的?
作者: zhaohongjian000    时间: 2010-06-15 09:28
回复 13# 单眼皮大姐

应该是整型。如下代码:
  1. unsigned int a=-3;
  2. char *p;
  3. p = ~a;
复制代码
根据编译器的警告,~a此时的类型被认为是整型。
作者: 单眼皮大姐    时间: 2010-06-15 23:43
回复 14# zhaohongjian000


    嗯~~~呵呵~~谢谢
作者: suavelee    时间: 2010-06-17 14:57
提示: 作者被禁止或删除 内容自动屏蔽
作者: 狗气球    时间: 2010-06-17 15:02
10楼说得很清楚啦。
作者: ps1987    时间: 2010-06-17 16:11
学习了~~~
作者: suavelee    时间: 2010-06-18 08:28
提示: 作者被禁止或删除 内容自动屏蔽




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2