long int 与 int 都是有符号的,只是表示的范围不一样。
price 为 int 型,count 为 long 型,运算结果为 long 型,运算结果正常,没有出现溢出的情况。
C语言的<< 移位运算是包括符号位的,1从第0位左移31位,当然到了第31位上,因此,得到你上面的数0x8000...,这个数当然是负数了。