数字逻辑练习题

来源:互联网 发布:2008年科比总决赛数据 编辑:程序博客网 时间:2024/06/01 08:08

题目描述

原码、反码、补码都是一样的,都是正数本身。 
 
对于负数: 
原码是符号位为 1,数值部分取绝对值的二进制。 
反码是符号位为 1,其它位是原码取反。 
补码是符号位为 1,其它位是原码取反,未位加 1。 
 
输入一个 64bit 十进制整数,输出它的原码,反码,补码的 16 进制表示法 

输入

有多组数据,每组数据一行,为一个 64bit 十进制整数,包含正负符号和数值,格式见样例。 
输入保证有唯一原码,反码,补码对应。 

输出

每组输出三个 16 进制数,分别为原码,反码,补码。 

样例输入

+1-1+10086-2333333

样例输出

0x00000000000000010x00000000000000010x00000000000000010x80000000000000010xfffffffffffffffe0xffffffffffffffff0x00000000000027660x00000000000027660x00000000000027660x8000000000239a950xffffffffffdc656a0xffffffffffdc656b
#include <cstdio>#include <vector>#include <cstring>#include <string>#include <cstdlib>#include <iostream>#include <iomanip>//不要忘记包含此头文件#include <algorithm>using namespace std;long long n;long long k=0xffffffffffffffff,p=0x8000000000000000;int main() {    char c;    while(cin>>c>>n)    {         if(c=='+')        {             cout<<"0x"<<setw(16)<<setfill('0')<<hex<<n<<endl;             cout<<"0x"<<setw(16)<<setfill('0')<<hex<<n<<endl;             cout<<"0x"<<setw(16)<<setfill('0')<<hex<<n<<endl;        }        else        {              cout<<"0x"<<setw(16)<<setfill('0')<<hex<<(n+p)<<endl;             cout<<"0x"<<setw(16)<<setfill('0')<<hex<<(n^k)<<endl;           cout<<"0x"<<setw(16)<<setfill('0')<<hex<<((n^k)+1)<<endl;        }    }    return 0;}

0 0
原创粉丝点击