您的位置:首页 > 理论基础

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

2016-04-04 13:26 363 查看
因为计算机能够识别二进制序列,所以计算机会以二进制的形式存储一个数 。对于一个正数,以原码的形式存储。对于负数,以补码的形式存储。

正数的原码,反码,补码相同:
例: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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息