一:进制转换
1. 二进制转十进制:
计算方法:从右向左依次乘上2的n次幂,n从零开始,^符号表示次幂
1001 0110 1*2^7+0*2^6+0*2^5+1*2^4+0*2^3+1*2^2+1*2^1+0*2^0=150
1000 0000 -2^7 -128
1000 0010 -2^7+2^1 -126
0111 1111 2^7-1 127
2、十进制转二进制:
计算方法:十进制转二进制就是二进制转十进制的逆过程。
(逆序取整)
拿十进制150来举例。
150/2=75(余数为0)
75/2=37(余数为1)
37/2=18(余数为1)
18/2=9(余数为0)
9/2=4(余数为1)
4/2=2(余数为0)
2/2=1(余数为0)
1/2=0(余数为1)
整合为10010110即是转换的二进制。
常用十进制与二进制互换:
二进制 十进制
0000 0100 4
0000 1000 8
0001 0000 16
0010 0000 32
0100 0000 64
1000 0000 -128
0111 1111 127
1111 1111 -1
3.二进制转十六进制:
首先需要4个二进制数各划分一个区域,不足时则补零(从左补零)。然后每个区域从右向左依次乘上2的n次幂,n从零开始,^符号表示次幂。合并得到的数就是转换后的十六进制数。
下图为十六进制数参考表格:
拿二进制数1 0010 1100举例:
补零->0001 0010 1100
计算-> 1 2 12(参考表格,12在十六进制中为C)
合并-> 12C
即,转换成的十六进制数为12C.
参考文章:@mez_Blog—— 进制之间的转换(二进制、八进制、十进制、十六进制)
二、原码与补码的转换
正数:补码与原码一致,
负数:正数原码按位取反再加一
-96 ->96->0110 0000->1001 1111->1010 0000
三、字节数
char
字节数:1Byte=8bit ··········//1个字节,4位。
min: 1000 0000
-128 //转化的十进制数
-2^(8-1) //计算过程
max:0111 1111
127 //转化的十进制数
2^(8-1)-1 //计算过程
unsigned char 无符号char
字节数:1Byte=8bit ··········//1个字节,4位。
min:0000 0000
0
max:1111 1111
255 //转化的十进制数
2^8-1 //计算过程
int
字节数:4Byte=32bit ··········//4个字节,32位。
min: -2^(32-1)
max: 2^(32-1)-1
unsigned int
字节数:4Byte=32bit ··········//4个字节,32位。
min: 0
max: 2^32-1
规律:
有符号的最大值为:2^(字节位数-1)-1;
有符号的最小值为:-2^(字节位数-1);
无符号的最大值为:2^字节位数-1;
无符号的最小值为:0;
浮点型
float (常用) 4B
double 8B
4.0 100.0
2.0 10.0
1.0 1.0
1.5 1.1
0.1 0.0001 100…
乘二取整法 (顺序取整)
0.1 0.0001 100…
十进制数转换成二进制数是取不完的。
0.2 0
0.4 0
0.8 0
1.6 1
0.6
1.2 1
0.2 0
0.4 0
四、ASCII 码
凡是字符,都要看成一个数字。
Int j=’B’;
Char a=’B’;
Printf(“/b /b”,j,a);
输出:66 66
五、电脑中的加减
65 0100 0001
71 0100 0111
65+71 -> 1000 1000 -120
六、类型转换
char j = 65;
unsingned int a = 0;
j = j + 71;
a = j;
Printf(“/d /b”,j,a);
输出:-120 136
65+71 -> 1000 1000 -120(负数)
1000 1000 136(正数)
(与取值范围有关:char 为正负 125,unsingned int 为 0 到 256)
七、程序
switch(){
case 1: break;
default: //default可以放在任意位置
}
// 根据优先级调整 case 的顺序,如大部分学生成绩在六七十,则将 case6,case7 调前,可以优化程序。
当 if()里的语句为 1 或其他不为 0 的数时,则执行,若为 0,则不执行。
X>20 也是一个数,逻辑,正确为1,错误为0.
如:
int x = 45,i = 0;
i = x > 40;
输出i,得 1.
While();
int i=0;
While(i<11)i++;
For(;i<11;i++);
八、位运算
<< >> & | ^
<< >>(左移,右移运算)
char i = 64; // 0100 0000
i = i << 1; //左移 1000 0000
输出i;得 -128.
&(与运算)
A 0 0 1
B 0 1 1
C = A & B;
C 0 0 1
(有 0 皆为 0, 双 1 则不变。)
i = 0110 1001;
j = 0011 1100;
i = i & j;
i = 0010 1000;
|(或运算)
同理,|(或逻辑),有 1 则为 1;双 0 则不变。
1101 1100
0010 1101
->1111 1101
非运算
非 0 值为 0;0 值为 1;
int i = 101;
i = !i;
输出i,得 0.
按位取反
i = ~i;
1001 0010
->0110 1101
^(亦或)
相同为 1,相异为 0;
只设置第五位为1=> i=i |(1<<5);
00001001 00001001 00001001 00001001
00000000 00000000 00000000 00010000
00001001 00001001 00001001 00011001
只设置第五位为0=> i=i&~(1<<5);
00001001 00001001 00001001 00011001
00000000 00000000 00000000 00010000
11111111 11111111 11111111 11101111
00001001 00001001 00001001 00001001