计算机存储形式与进制转换
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
低字节保存在低地址处,高字节保存在高地址处。
通常我们在书写时采用大端形式,而计算机在存储时采用小端存储,我们可以来验证:
二进制与十进制转换:
>>右移:二进制向右移位,正数的话空出来的补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
正数的原码,反码,补码相同:
例: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
相关文章推荐
- 使用 Libki 来管理公共用户访问计算机
- 微型计算机的始祖:Altair 8800
- 通过手机、电脑远程开关机,Windows和linux机手机,电脑相互控制
- C语言进制转换代码分享
- php实现用手机关闭计算机(电脑)的方法
- PHP中实现中文字符进制转换原理分析
- 用IE重起计算机或者关机的示例代码
- JS中字符问题(二进制/十进制/十六进制及ASCII码之间的转换)
- 一张图告诉你计算机编程语言的发展历史
- php 实现进制转换(二进制、八进制、十六进制)互相转换实现代码
- javascript parseInt() 函数的进制转换注意细节
- 进制转换算法原理(二进制 八进制 十进制 十六进制)
- 计算机科学中32个常用的基础算法
- Shell脚本中不同进制数据转换的例子(二进制、八进制、十六进制、base64)
- 不能在本地计算机启动 apache2.2解决方法
- 使用JavaScript进行进制转换将字符串转换为十进制
- Javascript进制转换实例分析
- python获取本地计算机名字的方法
- Python中不同进制互相转换(二进制、八进制、十进制和十六进制)
- python获取当前计算机cpu数量的方法