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次方)