- 论坛徽章:
- 2
|
以下是我刚找的:
求给定数值的补码表示分以下两种情况:
1.正数的补码:即为其原码。
2.负数的补码:取其绝对值的原码按位取反再加1,即是此负数的补码
给定补码,求补码所表示的(十进制)数值:
1:如果给定的补码形式,是以0开头,则说明此补码表示的是一个正数,直接把此二进制换算成10进制就行。
2:如果给定的补码形式,是以1开头,则说明此补码表示的是一个负数;只需要对此补码按未取反,再对其加1,然后把得到的二进制换算成10进制,得到的就是此补码表示的数值的绝对值,加上负号,就是表示的数值。
【问题一】 -5 -1 在计算机中的实现?(为方便叙述,设数据仅为1个字节)
第一步:首先计算对应十进制数的在计算机中的补码:
-5:1000 0101(原码) ----1111 1010(反码) --1111 1011(补码)
-1:1000 0001(原码)-----1111 1110(反码)---1111 1111(补码)
所以 -5 在内存中的形式是 1111 1011;
-1 在内存中的形式是 1111 1111;
相加运算:
1111 1011
+ 1111 1111
1111 1010 (溢出一位,丢弃)
计算出来的结果为 1111 1010,这个也是一个补码,那他代表的十进制数是怎么计算?
补码对应的十进制数:补码最高位为0,表示正数;补码最高位为1表示负数
确定了符号后,需要确定其绝对值:补码按位取反后加1,也就是原码的绝对值。
所以 -5 – 1的计算结果(补码) 1111 1010对应的十进制数绝对值为:0000 0110,即绝对值为6,最后加上符号,得结果为-6
所以,计算机计算 -5 -1 的结果为 -6
【问题二】为什么8位的有符号数据的范围是-128 ~ 127 ?
给定一个8bit的存储空间(存储空间中的数据均被视为补码),
它所能表示的最大正数是0111 1111(补码),也就是说8位的空间中存放最大的整数在内存中的形式为 0111 1111(补码形式)
0111 1111该补码表示是正数,对应的十进制数为127.
如果该8位内存要存放负数,则最大的负数(补码)为1000 0000,这个最大负数在内存中的存储形式(补码)为 1000 0000.它表示是一个负数。
1000 0000(补码) ----》0111 1111(按位取反) ----》1000 0000(取反后加1)
1000 0000对应的值为128,由于符号是 - ,所以最小的负数是 -128。
|
|