宝慕林4294392
short int 的允许数值范围是 -32768 到 +3276732768 超出了short int 的允许数值范围所以 cout<<(short) 32768 得到的结果 取决于 编译器处理,没有太大的道理。---可以用16进制输出,看它的2进制数值#include <iostream>using namespace std;#include <stdio.h>int main(){short int x = 32768;cout<<(short) 32768<<endl;printf("0x%x %d\n",0xffff & x,x);return 0;}-327680x8000 -327680x8000 -> 2进制数值 1000 0000 0000 0000符号位1就是负数,补码是全零。求原码,补码减1再求反。0 减1 不够减,怎么办呢, 要从高位借1, 减1得全1,求反 得全 0 (别忘高位欠1)因而 不看符号位的原码为 正数 0x8000不看符号位的原码 正数 0x8000 就是 十进制 32768加符号就是 -32768。-- 没有太大的道理 的 道理。