-----------android培训、java培训、java学习型技术博客、期待与您交流!------------
C语言中整数的常用进制有三种,二进制、八进制、十六进制和十进制。
二进制:
二进制就是数字的每一个位上只能是0和1两个字符,它的表示方法是在数字的前面加上0B或者0b,比如说0B1110代表的就是二进制的数。二进制转换成十进制是怎么转换的呢?它的每个位转换成十进制的值都是:m乘以2的n-1次方,这里m代表这一位上的数字,n代表的是第几位。比如说0B1110这个数字,它转化成十进制就是0*1+1*2+1*2*2+1*2*2*2 = 14。
八进制:
八进制就是数字的每一个位上只能是0~7八个字符,它的表示方法是在数字的前面加上0,比如说0117代表的就是八进制的数。八进制转换成十进制是怎么转换的呢?八进制转换为十进制的方法与二进制转换成十进制的方法类似,只不过它乘上的是8的次方。比如说0117这个数字,它转化成十进制就是7*1+1*8+1*8*8 = 79。
十六进制:
十六进制就是数字上的每一位只能是0~9,a~f(可以是大写)这十六个字符。它的表示方法就是在数的前面加上0x或者0X。十六进制转换为十进制的方法与八进制转换成十进制的方法类似,只不过它乘上的是16的次方。比如说0x21A这个十六进制数字,它转换成十进制就是A*1+1*16+2*16*16=10*1+1*16+2*16*16= 538。
十进制就是我们平常用的数字,比如说21,33这些数字。
下面我们来学习输出控制符。我们常用的输出控制符一般有以下几种:
%d或者%i:代表输出的是十进制的整数。
%o:代表输出的是八进制的整数。
%x::代表输出的是十六进制的整数。
%p:代表输出的是地址。
%c:代表输出的是字符。
%s:代表输出的是字符串。
%f:代表输出的是小数。
下面的代码就是输出控制符的运用:
#include <stdio.h>
int main()
{
int a = 0x21A;
printf("按十进制输出是:%d\n", a);
printf("按八进制输出是:%o\n", a);
printf("按十六进制输出是:%x\n", a);
char c = 'A';
printf("按十进制输出是:%d\n", c);
printf("按字符输出是:%c\n", c);
return 0;
}
输出结果是:
按十进制输出是:538
按八进制输出是:1032
按十六进制输出是:21a
按十进制输出是:65
按字符输出是:A
从输出结果我们可以看出变量a的赋值的确是按照十六进制的复制方式赋值的,而且可以按照其它的进制输出。其中字符变量c我们可以看出它也可以转化为十进制输出,这说明了字符其实也是整型变量。在内存中,字符是按照ASCII码表存储的。字符 'A' 在内存中存储的是65,'a' 在内存中则是97,也就是说大写字母的ASCII值要比小写字母的小32。在ASCII码表中,97到112代表的是小写字母a到z,65到90代表的是大写字母A到Z。
其实我们再给字符变量赋值的时候也可以直接写它的ASCII值。比如 char c = 65; 这就代表了给字符变量的值是 'A' 。
下面我们来学习位运算,位运算分为下面几种:
&:按位与。
|:按位或。
^:按位异或。
~:取反。
<<:左移。
>>:右移。
上面的六种位运算符的前三种都是二目运算符,后面三种是一目运算符。
下面我们在代码中学习位运算:
#include <stdio.h>
// 位运算是把数值转换成二进制后再进行运算的
int main()
{
int a = 5, b = 6;
/*
按位与是把数值的二进制形式按对应的位与,只有两个都为1的时候才是1,否则为0。
a:0101
b:0110
-------
&:0100 6
*/
printf("按位与的结果是:%d\n", a&b);
/*
按位或是把数值的二进制形式按对应的位或,只有两个都为0的时候才是0,否则为1。
a:0101
b:0110
-------
|:0111 7
*/
printf("按位或的结果是:%d\n", a|b);
/*
按位异或是把数值的二进制形式按对应的位异或,两个数相等时为0,不相等为1。
a:0101
b:0110
-------
^:0011 3
*/
printf("按位异或的结果是:%d\n", a^b);
/*
取反是把数值的二进制形式按位取反,位上是1变为0,位上是0变为1,符号位也取反。
a:0000 0000 0000 0000 0000 0000 0000 0101
--------------------------------------------
~:1111 1111 1111 1111 1111 1111 1111 1010 -6
*/
printf("取反的结果是:%d\n", ~a);
/*
左移是把数值的二进制形式按位向左移动n位,高位丢弃,低位补0。下面是把a左移1位
a: 0000 0000 0000 0000 0000 0000 0000 0101
--------------------------------------------
<<:0000 0000 0000 0000 0000 0000 0000 1010 10
*/
printf("左移的结果是:%d\n", a<<1);
/*
右移是把数值的二进制形式按位向右移动n位,符号位不变,高位补0,低位丢弃。下面是把a右移1位
b: 0000 0000 0000 0000 0000 0000 0000 0110
--------------------------------------------
>>:0000 0000 0000 0000 0000 0000 0000 0011 3
*/
printf("右移的结果是:%d\n", b>>1);
return 0;
}
上面的代码和里面的注释就是位运算的概念和做法。
总结:
1、常用进制有二进制、八进制、十进制和十六进制。
2、二进制、八进制和十六进制向十进制转换:每位上都是进制数的位数减1次方。
3、通过输出控制符我们可以控制输出的格式,不同的输出控制符有不同的效果。
4、位运算就是把数字转换成二进制后再进行与或非、左移和右移的运算。左移就是把数字扩大为两倍。