在计算机中 : 负数的类型转换 (概述)

在计算机中,负数一般以补码的形式来存储。

以8位二进制为例,假设我们要表示-1,我们首先写出1的二进制形式,即00000001。然后得到这个数的反码,即将0和1全部取反,得到11111110。然后再对这个反码加1,得到11111111,这就是-1在8位二进制下的补码表示。所以,-1在计算机中一般不会被存储为10000001,而是会被存储为11111111(在8位二进制下)。当然,具体的存储方式可能会因为计算机的位数不同而有所不同,例如在16位、32位或64位的计算机中,-1的二进制表示会有所不同。但无论在哪种计算机中,-1的二进制表示都会以补码的形式存在。在显示负数的时候,计算机会将补码转换为原码,再显示出来。例如,如果我们读到一个二进制数11111111(在8位二进制下),我们就知道这个数      是-1。

所以 1为0000 0001

        127为 0111 1111

        -1为1111 1111

       -2为1111 1101

       -3为1111 1100;

       -127  为1000 0001  (补码减一在取反   1111 1111  ->1111 1111 (-127)

       -128  为1000 0000  减一为0111 1111  取反为1000 0000 如果是2的7次方是128呢. 

好的做一题

提示: 2的32次方为4294967296也就是100000000(32个0)...... 2的31次方为2147483648 为100000.....

所以-1u为11111(32个1)就是4294967295 (比2的32次方小一个数)

下面为判断题 1为true 2为false

0==0u 为 1  ( 注意后面加了u表示强制类型转换 ,比较的两个数都将转换为无符号类型 再进行转换)

-1<0    为 1

-1<0u 为0   -1为111111111.....(补码是这样的)       转化为无符号数自然大于0

2147483647u>-2147483647-1    为0, 

详解: 首先2147483647的二机制为 111111111....(31个)

         而-2147483647-1为   -2147483647-1为 -2147483648 为 1000000000...变为无符号整数为2的31次方,也就是2147483648 所以大于2147483647  

(unsigned)-1>-2     1            -1为1111 1111  -2为   1111 1110 转化为无符号后正确

像-2147483647-1==2147483648u    

-2147483647-1为-2147483648   就是1 0000(一共31个零)转化为无符号型为212147483648故正确.

猜你喜欢

转载自blog.csdn.net/qq_64200765/article/details/131921148