C语言—机器字、大小端及原码、反码和补码

一.机器字
    机器字不同于高级语言中的“字”
    高级语言中的“字”指一个二进制数据的位数,一般的一个字由八位二进制数组成。
    要了解数据在计算机中的读取方式,首先我们要了解一个概念:机器字长。
    机器“字”,是计算机能够一次性处理事务的一个固定长度位组。一个“字”的位数即字长。
    机器字长是指:计算机进行一次整数运算所能处理的二进制数据的位数。
    在计算机中,机器字长能够反映出计算机处理数据的能力和数据处理的精度。机器字长越大,表示计算机能够一次性处理的数据的位数越多,计算机处理数据的能力越强,时间越短,精度越大。
二. 大小端问题
    在数据处理过程中,存放在静态存储区的数据由CPU寻址进行读取、译码和操作。问题在于读取之后如何进行值的大小确定,这就涉及了位的权值,依此,我们来介绍大小端的概念。
    在内存中,大端模式或小端模式是由计算机的硬件操作系统决定的。
⑴ 大端 Big-endian 
     指数据的高位存储在低地址中,数据的低位存储在高地址中。即越往下,数据的权值越大;越往上,数据的权值越小。
⑵ 小端 Little-endian
     指数据的高位存储在高地址中,数据的低位存储在低地址中。即越往下,数据的权值越小,越往上,数据的权值越大。
三. 原码、反码和补码
⑴ 原码:数据的二进制表达形式。
⑵ 反码:正数的反码不变,负数的反码在原码的基础上除了符号位,其他都取反。
⑶ 补码:正数的补码不变,负数的补码在原码的基础上除了符号位取反,并且在最后位上加一。
由于最高位上存储的是数据的符号,我们将除符号位的7位二进制表示的数称为真值;带有符号位的八位二进制表示的数称为形式值。
下面,我们探讨数据在内存中的存储形式:
我们知道,数据在计算机内都是以二进制的形式来表示的,原码、反码和补码都表示同一个数据,问题是,数据究竟是以这三种表示形式中的哪一种被存储进内存的呢?
假设,数据以原码的形式存储:
用原码进行简单的数据运算:1-1=0
在计算机中运行减法运算时,可以将减去一个数转换成加上这个数的负数。因为在数据的二进制表达中,数据的正负是通过最高位的数字来表示的(0表示正数,1表示负数),如果计算机进行运算时对符号位进行辨认后再操作,那么程序就太过复杂了。为了在计算过程中将符号位也带入运算,简化运算步骤,将计算机中的减数都转换成加上这个数的负数。
1-1=1+(-1)=[00000001]原+[10000001]原
                       =[10000010]原=-2
显然,用原码进行数据运算后的结果是错误的。故在计算机中,数据的存储形式不是原码。
再假设,数据以反码的形式存储:
用反码进行简单的数据运算:1-1=0
1-1=1+(-1)=[00000001]原+[10000001]原
                       =[00000001]反+[11111110]反
                       =[11111111]反=[10000000]原
                       =-0
从真值上看,用反码表示数据时进行的数据运算的结果是可取的,但问题出在0前面的“负号”上。
如果计算机用反码存储数据,那么对于数据0,就有一正一负两种表达形式,显然,这是不可取的。
补码的出现,解决了0的双符号和两个编码的问题
用补码进行数据存储,进行简单的数值运算:1-1=0
1-1=1+(-1)=[00000001]原+[10000001]原
                       =[00000001]反+[11111110]反
                       =[00000001]补+[11111111]补(注:在运算过程中,符号位也参与运算,该进位就进位
                       =[00000000]补=[00000000]原(补码的补码等于原码)
                       =0
由简单的运算可以看出,数据在内存中以二进制补码的形式存储。



















  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值