C语言中的条件语句是否总是返回[1或0],还是返回[0或“非零值”]?我问这个问题是因为:
伪代码 -
foo(address, shouldSend): register >>= 1 register <<= 1 //清除第一个位置上的位 register |= shouldSend //用于标记它是否应该发送
如果有人传递了一个大于1的true值给shouldSend(因为只有0是false,其他所有值都是true,从技术上讲这是有效的),就会出现问题。由于我直接将shouldSend的真值与寄存器进行OR运算,所以最好不要是0xFF!我已经有了解决方案,所以问题更多是出于好奇。但我想知道的是:
foo(address, shouldSend): register >>= 1 register <<= 1 // to clear bit in first position register |= (shouldSend > 0) //用于标记它是否应该发送
能否解决这个问题?我认为现在C条件语句掩盖了传入的0xFF(或一般来说是大于1的值)的问题。但是这仅在C条件语句保证返回[0或1]的情况下成立。
PS- 我也意识到这可能与编译器有关,但ANSI标准对此有何说法?
伪代码 -
foo(address, shouldSend): register >>= 1 register <<= 1 //清除第一个位置上的位 register |= shouldSend //用于标记它是否应该发送
如果有人传递了一个大于1的true值给shouldSend(因为只有0是false,其他所有值都是true,从技术上讲这是有效的),就会出现问题。由于我直接将shouldSend的真值与寄存器进行OR运算,所以最好不要是0xFF!我已经有了解决方案,所以问题更多是出于好奇。但我想知道的是:
foo(address, shouldSend): register >>= 1 register <<= 1 // to clear bit in first position register |= (shouldSend > 0) //用于标记它是否应该发送
能否解决这个问题?我认为现在C条件语句掩盖了传入的0xFF(或一般来说是大于1的值)的问题。但是这仅在C条件语句保证返回[0或1]的情况下成立。
PS- 我也意识到这可能与编译器有关,但ANSI标准对此有何说法?