zoukankan      html  css  js  c++  java
  • 5E

    There must be many A + B problems in our HDOJ , now a new one is coming. 
    Give you two hexadecimal integers , your task is to calculate the sum of them,and print it in hexadecimal too. 
    Easy ? AC it !

    Input

    The input contains several test cases, please process to the end of the file. 
    Each case consists of two hexadecimal integers A and B in a line seperated by a blank. 
    The length of A and B is less than 15.

    Output

    For each test case,print the sum of A and B in hexadecimal in one line.

    Sample Input

    +A -A
    +1A 12
    1A -9
    -1A -12
    1A -AA

    Sample Output

    0
    2C
    11
    -2C
    -90

    // printf函数中%x、%X区分大小写,且输出无符号整数(不输出前缀0x、0X)
    // scanf函数中%x、%X不区分大小写
     1 #include<stdio.h>
     2 int main()
     3 {
     4     __int64 a, b, sum;
     5     while(scanf("%I64X %I64X", &a, &b)!=EOF)
     6     {
     7         sum=a+b;
     8         if(sum<0)
     9         {
    10             sum=-sum;
    11             printf("-");
    12         }
    13         printf("%I64X
    ", sum);
    14     }
    15     return 0;
    16 }
    View Code
    // 补充->补码
    计算机中的符号数有三种表示方法,原码反码和补码
    三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”(0有两种表示:+0和-0),
    而数值位,三种表示方法各不相同。

    正数

    正整数的补码是其二进制表示,与原码相同

    【例1】+9的补码是00001001。

    备注:这个+9的补码是用8位2进制来表示的。

    补码表示方式很多,同一个数字在不同的补码表示形式中是不同的。除了8位2进制,还有16位二进制补码表示形式,以及32位二进制补码表示形式,64位进制补码表示形式等。每一种补码表示形式都只能表示有限的数字。

    负数

    求负整数的补码,将其原码除符号位外的所有位取反(0变1,1变0,符号位为1不变)后加1

    【例2】数0的补码表示是唯一的。

    [+0]补=[+0]反=[+0]原=00000000

    [-0]补=11111111+1=00000000

    转化为原码

    已知一个数的补码,求原码的操作其实就是对该补码再求补码:

    ⑴如果补码的符号位为“0”,表示是一个正数,其原码就是补码。

    ⑵如果补码的符号位为“1”,表示是一个负数,那么求给定的这个补码的补码就是要求的原码。

    【例4】已知一个补码为11111001,则原码是10000111(-7)。

    因为符号位为“1”,表示是一个负数,所以该位不变,仍为“1”。

    其余七位1111001取反后为0000110;再加1,所以是10000111。

    补码的绝对值

    【例5】-65的补码是10111111

    若直接将10111111转换成十进制,发现结果并不是-65,而是191。

    事实上,在计算机内,如果是一个二进制数,其最左边的位是1,则我们可以判定它为负数,并且是用补码表示。

    若要得到一个负二进制补码的数值,只要对补码全部取反并加1,就可得到其数值。

    如:二进制值:10111111(-65的补码)

    各位取反:01000000

    加1:01000001(+65)

  • 相关阅读:
    Python简单的闹钟程序(Win)+开机自启
    (未完待续)学习机器学习必备的线性代数知识
    条件随机场 0 | 随机过程的概念及其统计特征
    Python-OpenCV学习(五):二维绘图
    Python-OpenCV学习(四):基本图像处理
    Python-OpenCV学习(二):OpenCV+python在windows上的安装
    CF 158A
    CF 84 div1 A
    CF 153 div1 A
    CF 171B
  • 原文地址:https://www.cnblogs.com/goldenretriever/p/10355797.html
Copyright © 2011-2022 走看看