C语言之进制与位运算
1.初识 进制:
1.1十进制:我们日常生活中的运算就是十进制,逢10进1;
1.2二进制:我们所写的代码到最后都会由编译器转换成0和1的二进制.所以二进制就是逢2进1;
1.3八进制:逢8进1;
1.4十六进制:逢16进1
2.进制之间的转换
2.1十进制转二进制的方法:除2取余,倒叙读取
2.2二进制转换十进制的方法:2的位数次方想加
2.3二进制转八进制:三个二进制位代表一个八进制位.用二进制转十进制的方法依次算出.(因为3个二进制位最大的取值是7)
2.4二进制转十六进制:四个二进制位代表一个十六进制位,方法同2.3
3.原码反码补码
数据都是以二进制的补码的方式存储的
/* int a = 5 ; 00000000 00000000 00000000 00000101 原码 00000000 00000000 00000000 00000101 反码 00000000 00000000 00000000 00000101 补码 正数的原码,反码,补码一致 int b = -3; 10000000 00000000 00000000 00000011 原码 11111111 11111111 11111111 11111100 反码 11111111 11111111 11111111 11111101 补码 负数的原码,反码,补码注意点: 1.无论是负数还是正数,首位都是符号位,用来表示正负,0为正,1为负. 2.正数的原码,反码,补码一致. 3.负数的反码是,符号位不变,其他位取反. 负数的补码是,在反码的基础上加1. */
4.位运算
位运算是正对二进制的运算
& 按位与 (当对应位数都为1时,才为1) 当偶数 & 1 返回0. 奇数 & 1 返回1.可以用来判断奇偶性
| 按位或 (当对应位数只要有一个为1,就为1)
^ 按位异或 (对应位数相同为0,相异为1) 可以用来交换两个变量的值
int a = 5; int b = 6; a = a ^ b; b = a ^ b; a = b ^ a; printf("a = %d, b = %d",a ,b );
~ 取反 (取相反)
<< 左移( << n 将补码所有位数向左移动n 位. 左边溢出位数丢弃,右边不足以0补. 用于计算某数乘以2的n次方,但是该方法有可能改变数值的正负性)
>> 右移( >> n 将补码除符号位不变其余所有位数向右移动n位,右边溢出位数丢弃,左边不足以0补.用于计算某数值除以2的n次方)