请问在C++ 中语句cout<<(short) 32768<<endl; 输出什么 ?

麻烦能解释一下吗 最好从补码的角度

牛魔王的故事
浏览 303回答 3
3回答

宝慕林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。-- 没有太大的道理 的 道理。

慕的地6264312

32768的二进制0000000000000000 1000000000000000强制类型转换short为1000 0000 0000 0000因为高位为1所以该数的补码为 1111 1111 1111 1111 - 1 == -32768

森栏

应该是-(2^15),因为32768的二进制表示是0000000000000000 1000000000000000 强制类型转换为1000000000000000最高位为符号位
打开App,查看更多内容
随时随地看视频慕课网APP