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很不厚道耶....你的题目明明问的是"结果是什么?",又不要结果....
你要的是什么程序?
输出的程序吗?
很巧 我也在做这个程序
因为溢出问题
所以会输出42486的补码-23050
#include "iostream"
using namespace std;
void Unsigned(unsigned short int x){
cout<<"OCT:"<
void Signed(unsigned short int x){
cout<<(signed short int) x<
cout<<"the numeber is 42486"<
Unsigned(42486);
return 0;
你的问题补充有问题,无符号短整型的范围是:0-65535,有符号短整型的范围才是:-32768-+32767,注意改正哦。具体问题的解答见二楼,他是对的!
不变