注意:这个问题涉及到位移操作符<<和>>的第二个操作数的有无符号性,而与第一个操作数无关。
根据CERT INT34-C的部分内容:不要将负数位移...
并非需要证明,但他们证明了这是未定义行为。
我本来认为这个规则很简单,因为如果你想向另一个方向进行位移,就使用适当的位移操作符以正数位移。
所以,在C中,通过负数位移既不必要也是未定义的,为什么<<或>>的第二个操作数甚至可以是带符号的?
MISRA-C:2004在其第6.10.2节中指出,无论您对MISRA的看法如何,作为解释结果类型仅依赖于第一个操作数的副作用,它说“第二个操作数可以是任何有符号或无符号整数类型”。[我强调的]。
为什么要邀请人们使用带符号的第二个操作数进行位移?为什么要允许它?是否有任何编译器会发出警告?
根据CERT INT34-C的部分内容:不要将负数位移...
并非需要证明,但他们证明了这是未定义行为。
我本来认为这个规则很简单,因为如果你想向另一个方向进行位移,就使用适当的位移操作符以正数位移。
所以,在C中,通过负数位移既不必要也是未定义的,为什么<<或>>的第二个操作数甚至可以是带符号的?
MISRA-C:2004在其第6.10.2节中指出,无论您对MISRA的看法如何,作为解释结果类型仅依赖于第一个操作数的副作用,它说“第二个操作数可以是任何有符号或无符号整数类型”。[我强调的]。
为什么要邀请人们使用带符号的第二个操作数进行位移?为什么要允许它?是否有任何编译器会发出警告?