计算机存储形式与进制转换

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算机存储形式与进制转换相关的知识,希望对你有一定的参考价值。

因为计算机能够识别二进制序列,所以计算机会以二进制的形式存储一个数 。对于一个正数,以原码的形式存储。对于负数,以补码的形式存储。


正数的原码,反码,补码相同:

例:1

原码:00000000 00000000 00000000 00000001

反码:00000000 00000000 00000000 00000001

补码:00000000 00000000 00000000 00000001


负数:负数以补码的形式存储(最高位是符号位,1表示负,0表示正)

例:-1

原码:10000000 00000000 00000000 00000001

反码:11111111 11111111 11111111 11111110(符号位不变,其余位按位取反)

补码:11111111 11111111 11111111 11111111(原码取反再加一)


大端小端:因为计算机存储的最小单位是字节,而一个字节是8个bit位,所以我们将整型4个字节的1表示为:00 00 00 01

例:1 

大端形式:00 00 00 01 

小端形式:01 00 00 00

通常我们在书写时采用大端形式,而计算机在存储时采用小端存储,我们可以来验证:

union B
{
                 int a;
                 char b;
};
int main()
{
                 union B A;
                A.a = 1;
                printf( "%c\n",A.b);
                system( "pause");
                return 0;
}

按照小端存储的形式,输出的结果应该是ASCII码为1的值。


二进制与十进制转换:

技术分享


技术分享 

>>右移:二进制向右移位,正数的话空出来的补0;

例:7>>2=1(注意不能写成7<<-2,这儿是错误的形式)

00000000 00000000 00000000 00000111

00000000 00000000 00000000 00000001

<<左移:空出来的位补0

例:4<<1=8;

00000000 00000000 00000000 00000100

00000000 00000000 00000000 00001000


算术移位和逻辑移位:

只有再对于负数右移时才考虑的一种情况:因为负数的最高位是符号位,所以当向右移时,空出来的位是补0还是补1.

算术移位:空出来的位补1.

逻辑移位:空出的位补0.

具体是算术移位还是逻辑移位,取决于电脑平台,所以当负数右移时其程序不具有移植性。


按位与:针对二进制的每一位进行的运算,同为1才为1,否则为0;

例7&5=5

00000000 00000000 00000000 00000111

00000000 00000000 00000000 00000101

00000000 00000000 00000000 00000101


按位或:针对二进制的每一位进行的运算,至少有一个位为1才为1,否则为0;

例:8|4=12

00000000 00000000 00000000 00001000

00000000 00000000 00000000 00000100

00000000 00000000 00000000 00001100


异或:针对二进制的每一位进行的运算,相同为0,不同为1;

例:7^4=3

00000000 00000000 00000000 00000111

00000000 00000000 00000000 00000100

00000000 00000000 00000000 00000011


取反:针对二进制的每一位进行的运算,1变0,0变1;

00000000 00000000 00011000 00000011

11111111 11111111 11100111 11111100





本文出自 “11132019” 博客,请务必保留此出处http://11142019.blog.51cto.com/11132019/1760091

以上是关于计算机存储形式与进制转换的主要内容,如果未能解决你的问题,请参考以下文章

python3字符串与二进制互相转换

算法笔记:位运算

ASCII编码,将英文存储到计算机

编码与计算机存储

计算机中的原码,反码,补码,以及他们在内存中的存储形式。

C语言 如何将16进制形式的字符串,转化为相同的16进制的整型?