二进制和位运算
文章目录
进制转换
1.进制介绍
(1)二进制:0,1,满二进一,C语言中没有二进制常数的表示方法
(2)十进制: 0-9,满10进一
(3)八进制:0-7,满8进1,以数字0开头表示
(4)十六进制:0-9及A-F,满16进1.以0x或0X开头表示,此处A-F不区分大小写
[A->10 B->11 C->12 D->13 E->14 F->15]
如:0x21AF+1 = 0x21B0
2.其它进制转十进制
(1)二进制转十进制
规则:从最低位开始,将每个位上的数提取出来,乘以2的(位数-1)次方,然后求和。
二进制 1010 = 0*2^0+1*2^1+0*2^2+1*2^3=10
(2)八进制转十进制
规则:从最低位开始,将每个位上的数提取出来,乘以8的(位数-1)次方,然后求和。
0123 = 3*8^0+2*8^1+1*8^2=3+16+64=83
(2)十六进制转十进制
规则:从最低位开始,将每个位上的数提取出来,乘以16的(位数-1)次方,然后求和。
034A=10*16^0+4*16^1+3*16^2=842
2.十进制转其他进制
(1)十进制转二进制
规则:将该数不断除以2,直到商为0为止,然后将每步得到的余数倒过来,就是对应的二进制。
(2)十进制转八进制
规则:将该数不断除以8,直到商为0为止,然后将每步得到的余数倒过来,就是对应的二进制。
(3)十进制转十六进制
规则:将该数不断除以16,直到商为0为止,然后将每步得到的余数倒过来,就是对应的二进制。
3.二进制转其它进制
(1)二进制转八进制
规则:从低位开始,将二进制数每三位一组,转成对应的八进制即可
(1)二进制转十六进制
规则:从低位开始,将二进制数每四位一组,转成对应的八进制即可
3.其它进制转二进制
(1)八进制转成二进制
规则:将八进制每1位,转成对应的一个3位的二进制即可
0237 = 10011 111
(2)十六进制转成二进制
规则:将十六进制每1位,转成对应的一个4位的二进制即可
位运算
1.原码,反码,补码
- 二进制的最高位是符号位**: **0表示正数,1表示负数
- 正数的原码,反码,补码都一样 (三码合一)
- 负数的反码=它的原码符号位不变,其它位取反(0->1,1->0)
- 负数的补码=它的反码+1 //
- 0的反码,补码都是0
- 在计算机运算的时候,都是以补码的方式来运算的.
2.位运算符介绍
验证
#include <stdio.h>
int main(){
int a = ~2;
int b = 2&-3;
int c = -1<<2;
printf("a=%d b=%d c=%d",a,b,c);
getchar();
}