C++程序。 设整数42486,如果将其定义为无符号短整数,当以有符号数输出时,结果是什么?请用补码解释。

2025-03-11 11:25:51
推荐回答(4个)
回答1:

42486(10) = 1010010111110110(2) Unsigned

1010010111110110(2) Signed = -(101101000001001+1)(2)

= -23050(10)

-----------
(1)正数的补码:与原码相同。 例如,+9的补码是00001001。
(2)负数的补码:符号位为1,其余位为该数绝对值的原码按位取反;然后整个数加1。 例如,-7的补码:因为是负数,则符号位为“1”,整个为10000111;其余7位为-7的绝对值+7的原码0000111按位取反为1111000;再加1,所以-7的补码是11111001。
已知一个数的补码,求原码的操作分两种情况:
(1)如果补码的符号位为“0”,表示是一个正数,所以补码就是该数的原码。
(2)如果补码的符号位为“1”,表示是一个负数,求原码的操作可以是:符号位为1,其余各位取反,然后再整个数加1。 例如,已知一个补码为11111001,则原码是10000111(-7):因为符号位为“1”,表示是一个负数,所以该位不变,仍为“1”;其余7位1111001取反后为0000110;再加1,所以是10000111。
-----------

LZ很不厚道耶....你的题目明明问的是"结果是什么?",又不要结果....
你要的是什么程序?

输出的程序吗?

回答2:

很巧 我也在做这个程序
因为溢出问题
所以会输出42486的补码-23050
#include "iostream"
using namespace std;

void Unsigned(unsigned short int x){
cout<<"OCT:"< <<"HEX:"<
void Signed(unsigned short int x){
cout<<(signed short int) x<int main(){

cout<<"the numeber is 42486"< Signed(42486); //因为溢出,所以输出的为42486的补码-23050//
Unsigned(42486);

return 0;

回答3:

你的问题补充有问题,无符号短整型的范围是:0-65535,有符号短整型的范围才是:-32768-+32767,注意改正哦。具体问题的解答见二楼,他是对的!

回答4:

不变