C 在正整数上使用负数的左移位和右移位操作

C 在正整数上使用负数的左移位和右移位操作,c,C,可能重复: 在16位编译器上,为什么32-1会导致0? K&R出现这种行为的主要原因是什么 换档操作器>执行车辆的左右换档 左操作数乘以右操作数给定的位位置数, 它必须是非负的这是未定义的行为,并且将根据您使用的c实现而有所不同。但问题也是重复的。“如果移位表达式的右操作数为负,则结果未定义”:这并不能真正回答问题。它说正确的操作数必须是非负的,但没有说明如果将其设为负会发生什么。@quasiverse发生的事情正是提问者所经历的。。confusion@quasiverse如果有疑问,您将调用

可能重复:

在16位编译器上,为什么
32-1
会导致0? K&R出现这种行为的主要原因是什么

换档操作器>执行车辆的左右换档 左操作数乘以右操作数给定的位位置数,
它必须是非负的

这是未定义的行为,并且将根据您使用的c实现而有所不同。但问题也是重复的。“如果移位表达式的右操作数为负,则结果未定义”:这并不能真正回答问题。它说正确的操作数必须是非负的,但没有说明如果将其设为负会发生什么。@quasiverse发生的事情正是提问者所经历的。。confusion@quasiverse如果有疑问,您将调用UB。