这是怎么回事?
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




