CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

这是怎么回事?

楼主vagrantman(流浪者)2004-08-04 14:46:58 在 C/C++ / C语言 提问

ucSanyoCommand=0;  
  ucSanyoCommandNeg=1;  
  if(ucSanyoCommand!=(~ucSanyoCommandNeg))    
  {  
      bCheckout=FALSE;  
  }  
  程序竟然会进入到if里面。  
  若该为:  
  unsigned   char   ucCommandNeg;  
  ucSanyoCommand=0;  
  ucSanyoCommandNeg=1;  
  ucCommandNeg=~ucSanyoCommandNeg;  
  if(ucSanyoCommand!=(~ucSanyoCommandNeg))    
  {  
      bCheckout=FALSE;  
  }  
  程序就不回进入if里。  
  以上变量均为unsigned   char型。  
  有谁能解释一下? 问题点数:40、回复次数:11Top

1 楼whyglinux(山青水秀)回复于 2004-08-04 15:14:47 得分 10

~是按数位取反。1用二进制表示就是   00000001,取反后为   11111110,unsigned   char表示即为10进制的254,不是   0。  
   
  你应该使用逻辑运算中的“非”运算。把~ucSanyoCommandNeg改为   !ucSanyoCommandNeg   就可以了。Top

2 楼sunjx119(睿锐)回复于 2004-08-04 15:32:11 得分 0

楼上正解  
  Top

3 楼antijpn(antijpn)回复于 2004-08-04 16:36:53 得分 0

怎么可能?本来这段代码就是应该进入循环的,没有什么不对的吧?Top

4 楼tangfulin(雨寒月)回复于 2004-08-04 18:59:32 得分 0

对啊,~是按位的。建议先学二进制先!Top

5 楼vagrantman(流浪者)回复于 2004-08-05 12:32:46 得分 0

不好意思,我写错了,ucSanyoCommandNeg应该为255。Top

6 楼vagrantman(流浪者)回复于 2004-08-05 12:36:02 得分 0

纠正一下:  
  unsigned   char   ucCommandNeg;  
  ucSanyoCommand=0;  
  ucSanyoCommandNeg=1;  
  ucCommandNeg=~ucSanyoCommandNeg;  
  if(ucSanyoCommand!=(~ucSanyoCommandNeg))    
  {  
      bCheckout=FALSE;  
  }  
   
  该为:  
  unsigned   char   ucCommandNeg;  
  ucSanyoCommand=0;  
  ucSanyoCommandNeg=255;  
  ucCommandNeg=~ucSanyoCommandNeg;  
  if(ucSanyoCommand!=ucCommandNeg)    
  {  
      bCheckout=FALSE;  
  }  
  不好意思,请大家重新回答。Top

7 楼Sucky()回复于 2004-08-05 13:10:18 得分 10

前面如  
    whyglinux(山青水秀)    
  所说  
  在修改后  
   
  ~ucSanyoCommandNeg==0  
  (ucSanyoCommand!=ucCommandNeg)==0  
  不会进入if里执行bCheckout=FALSE;Top

8 楼vagrantman(流浪者)回复于 2004-08-05 16:42:13 得分 0

to     Sucky()   ,对但是  
  ucSanyoCommand=0;  
  ucSanyoCommandNeg=255;  
  if(ucSanyoCommand!=(~ucSanyoCommandNeg))    
  {  
      bCheckout=FALSE;  
  }  
  会进入到if里啊。Top

9 楼KingI(我现在很热!!!)回复于 2004-08-05 18:28:04 得分 20

这是因为:  
  ucSanyoCommand=0;  
  ucSanyoCommandNeg=255;  
  if(ucSanyoCommand!=(~ucSanyoCommandNeg))    
  {  
      bCheckout=FALSE;  
  }  
  这里的变量ucSanyoCommand和ucSanyoCommandNeg你是不是把它定义为整型.如果是的话,那么255不会超出整型的范围,而整型在内存中至少是占两个字节的,则~ucSanyoCommandNeg在内存中的表示为1111   1111   0000   0000   ,那么它怎样也不会是0所以条件为真,进入if.  
   
   
  unsigned   char   ucCommandNeg;  
  ucSanyoCommand=0;  
  ucSanyoCommandNeg=255;  
  ucCommandNeg=~ucSanyoCommandNeg;  
  if(ucSanyoCommand!=ucCommandNeg)    
  {  
      bCheckout=FALSE;  
  }  
  这里把ucCommandNeg定义为unsigned   char型,所以取值范围是0-255.所以将~ucSanyoCommandNeg赋给ucCommandNeg会将高位去掉,只取一个字节的内容,ucCommandNeg得到的只是~ucSanyoCommandNeg低位的数据,即:0000   0000,所以结果是0,条件为假,不进入if.  
  Top

10 楼vagrantman(流浪者)回复于 2004-08-06 10:35:00 得分 0

to   KingI(↑㊣↑),  
  我所有的类型都是unsigned   char的,没有什么int型的。Top

11 楼vagrantman(流浪者)回复于 2004-08-06 10:37:15 得分 0

其他地方都一样,就是我一个先去反付值给一个变量,再用这个变量来做比较,  
  而一个是直接去反做比较。两个结果确不一样。Top

相关问题

  • 这是怎么回事?VC
  • 这是怎么回事
  • 这是怎么回事呀
  • 这是怎么回事啊????
  • 这update是怎么回事??
  • 这是怎么回事啊?
  • 这个是怎么回事?
  • 这是怎么回事呢?
  • 这是怎么回事?
  • 这是怎么回事?

关键词

  • ucsanyocommandneg
  • ucsanyocommand
  • uccommandneg
  • bcheckout
  • 变量
  • 整型
  • 进入
  • unsigned char
  • 应该
  • 表示

得分解答快速导航

  • 帖主:vagrantman
  • whyglinux
  • Sucky
  • KingI

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo