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

 

posted @ 2016-01-12 13:42  啊呸(。)  阅读(486)  评论(0编辑  收藏  举报