我遇到了一个答案,我似乎无法弄清楚为什么这是对的。
因此有两个int变量x和y,它们分别代表0x66和0x39。
问题是基于表达式的结果值是什么。
x && y is apparently 0x01 (1)
x || y is 1
!x || !y is 0
x && ~y is 1
根据我的想法,我认为只要一个论点不为零就认为是真的。因此,只要x和y是一些非零值,那么&&运算符会产生1,当然只要其中一个是真的||运营商会产生1.
那为什么第三个问题是0?是个 !与bitwise~运算符不同?所以原来x是二进制的0101 0101,因为它不是零,在逻辑意义上它是真的,但是!它会是假的,还是它的数字的补码所以它的1010 1010?
答案 0 :(得分:1)
布尔结果总是为true或false,在C中,true由1
表示,false由0
表示。
逻辑非运算符!
给出布尔结果,即1
或0
。因此,如果表达式为“true”(即非零),则对该表达式应用!
将使其为假,即0
。
在您的示例中,您有!x || !y
。首先评估!x
,并将其计算为false,导致!y
被评估,并且它也计算为false,因此while表达式变为false,即0
。
答案 1 :(得分:0)
是的,!
与按位而不是~
不同。这是合乎逻辑的。它产生0或1。
答案 2 :(得分:0)
〜(0x01)将为0x10和 !(0x01)将为0x00
'〜'是一个按位运算符。 '!'是一个逻辑运算符。
答案 3 :(得分:0)
从我的想法来看,我认为只要一个论点不是 零被认为是真的。所以只要x和y是非零的 价值然后&&运算符会生成1,当然只有1 他们是真的||运算符会生成1。
这都是正确的。
class LatLng {
lat?: number;
lng?: number;
constructor(lat: number, lng: number) {
this.lat = lat;
this.lng = lng;
}
toJSon() {
return JSON.stringify({ this.lat, this.lng });
};
}
是。这是合乎逻辑的。就像其他逻辑运算符So why is the third question 0? Is the ! different from the bitwise ~ operator?
和&&
一样,它只关心变量是否具有非零值。
||
将产生!0
。
1
将产生!non_zero
。
请注意,C中的所有逻辑运算符都生成类型0
而不是int
,因为从C具有布尔类型之前的时间仍然是一种丑陋的向后兼容性。在C ++和其他类C语言中,逻辑运算符总是产生类型bool
。
同样,C中的bool
和true
实际上只是扩展为整数false
和1
的宏。在其他语言中,它们是关键字和布尔常量。