原反补及大小端

简介: 原反补及大小端

计算机中的整数有三种表示方法,即原码、反码和补码。

三种表示方法均有符号位数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位

负整数的三种表示方法各不相同。

原码

直接将二进制按照正负数的形式翻译成二进制就可以。

反码

将原码的符号位不变,其他位依次按位取反就可以得到了。

补码

反码+1就得到补码。

正数的原、反、补码都相同。 对于整形来说:数据存放内存中其实存放的是补码。

为什么呢?

在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统 一处理; 同时,加法和减法也可以统一处理(CPU只有加法器)此外,补码与原码相互转换,其运算过程 是相同的,不需要额外的硬件电路。

我们看看在内存中的存储:

我们可以看到对于a和b分别存储的是补码。但是我们发现顺序有点不对劲。 这是又为什么?

大小端介绍

什么是大端小端:

大端(存储)模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址 中;

小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位,,保存在内存的高地 址中。

假设有一个数的16进制是0x11223344

为什么有大端和小端:

为什么会有大小端模式之分呢?这是因为在计算机系统中,我们是以字节为单位的,每个地址单元 都对应着一个字节,一个字节为8bit。但是在C语言中除了8 bit的char之外,还有16 bit的short型,32 bit的long型(要看具体的编 译器),另外,对于位数大于8位 的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,那么必然存在着一个如 何将多个字节安排的问题。因此就 导致了大端存储模式和小端存储模式。 例如:一个 16bit 的 short 型 x ,在内存中的地址为 0x0010 ,x 的值为 0x1122 ,那么 0x11 为 高字节,0x22 为低字节。对于大端 模式,就将 0x11 放在低地址中,即 0x0010 中,0x22 放在高地址中,即 0x0011 中。小端模式, 刚好相反。我们常用的 X86 结构是 小端模式,而 KEIL C51 则为大端模式。很多的ARM,DSP都为小端模式。有些ARM处理器还可以 由硬件来选择是大端模式还是小端模式

相关文章
|
4月前
|
存储
计算机存储,字节分为大端和小端
计算机存储,字节分为大端和小端
35 1
|
3月前
|
存储 网络协议 API
大端与小端概念、多字节之间与单字节多部分的大小端转换详解
大端与小端概念、多字节之间与单字节多部分的大小端转换详解
63 1
|
3月前
|
存储
大小端模式
大小端模式
|
7月前
|
存储 小程序 编译器
C语言:大小端字节序存储
大端字节序存储模式:把一个数据低位字节处的数据存放在高地址处,数据高位字节处的数据存放在低地址处
59 0
|
7月前
|
C语言
关于大小端模式的浅谈
关于大小端模式的浅谈
34 0
|
8月前
|
存储 编译器 C语言
大小端字节序和整型提升
大小端字节序和整型提升
|
9月前
|
存储 编译器 C语言
【C语言】大小端介绍以及判断大小端的两种方式
【C语言】大小端介绍以及判断大小端的两种方式
199 0
|
10月前
|
存储 编译器 C语言
【大小端问题】
大小端是什么? 计算机在内存存储中有两中存储模式: 大端字节序存储模式和小端字节序存储模式。 大端存储模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中。 小端存储模式,是指数据的低位保存在内存的低地址中,而数据的高位,保存在内存的高地址中。
|
10月前
|
存储 IDE 编译器
C语言中整形的大小端存储
众所周知,在IDE Visual studio中,调试后可以在内存窗口中看见程序中一些变量的地址以及值 我们这里将一个16进制数字0x12345678存到内存中
51 0
|
11月前
|
存储 C语言
【C语言】大小端字节序问题
一、大小端字节序问题 大小端是由CPU决定的,大小端可以理解为字节顺序,所以大小端全称叫大端字节序、小端字节序。其实大端、小端这两个词是从《格列佛游记》里出来的。《格列佛游记》有一段讲的是吃鸡蛋是从大的那头敲开还是小的那头敲开的问题,书中把从大头敲开的那种叫做大端,把从小头敲开的那种叫小端,第一个指出计算机数据存储顺序问题的人就采用了这个大小端的说法。