1.进制表示
int a = 10; // 十进制
int a = 0b10; // 二进制 : 0b或0B标识
int a = 010; // 八进制 : 0标识
int a = 0x10; // 十六进制 : 0x或者0X标识
2.进制输出表示
printf("%i", a); // 十进制输出
printf("%o", a); // 八进制输出
printf("%x", a); // 十六进制输出
3.十进制转二进制
规律:十进制除以2取余,倒序读取
4.二进制转十进制
规律:转换原理:乘以2的幂数(幂数从0开始), 然后相加
5.二进制转八进制
规律: 三个二进制代表一个八进制位,只需要将3个二进制位转为十进制,之后再将所有的结果连接起来
6.二进制转十六进制
规律:四个二进制位代表一个十六进制位,只需要将4个二进制位转为十进制,之后再将所有的结果连接起来
7.二进制的源码/ 反码/ 补码
二进制的第一位是二进制的符号位,如果该位是0代表这个书是一个正数,如果该位是1代表这个数是一个负数
正数的源码反码补码都是一样的,三码合一
二进制的最高位我们称之为符号位
如果符号位是0代表是一个正数,
如果符号位是1代表是一个负数
10000000 00000000 00000000 00001100 (-12的原码)
11111111 11111111 11111111 11110011(反码, 符号位不变其它位取反)
11111111 11111111 11111111 11110011
+00000000 00000000 00000000 00000001
_____________________________________________
11111111 11111111 11111111 11110100(补码 , 反码+1)
结论:无论正数负数在内存中存储的都是补码
11111111 11111111 11111111 11110101 (补码)
-00000000 00000000 00000000 00000001 (-1)
_____________________________________________
11111111 11111111 11111111 11110100 (反码)
10000000 00000000 00000000 00001011
负数反码 : 最高位不变,其他位取反
负数补码 : 负数的反码+1
8.位运算(二进制运算)
/*
& 按位与 : 一假则假,任何数和1相&得到的结果还是那个数
| 按位或 : 一真则真
^ 按位异或 : 不相同为1,相同为0;
^ 规律 : 1.异或的结果和参与运算的顺序没有关系
2.相同的两个数异或等于0
3.任何一个数异或上0结果不变
4.任何一个数异或一个数两次,结果不变
~ 取反 : 0变1,1变0
~9
0000 0000 0000 0000 0000 0000 0000 1001
~1111 1111 1111 1111 1111 1111 1111 0110 (补码)
0000 0000 0000 0000 0000 0000 0000 0001
______________________________________________
1111 1111 1111 1111 1111 1111 1111 0101 (反码)
1000 0000 0000 0000 0000 0000 0000 1010
*/
9.左移(<<) 右移(>>)
左移(<<) : 左移就是用左移的数乘以2的移动次幂
注意点 : 由于左移运算,被移动的书的最高位会被抛弃(移除),所以左移有可能会改变一个数的政正负性
右移(>>) : 右移就是用右移的数除以2的移动次幂
9 >> 1 == 9 / 2(1) = 4
1.进制表示
int a = 10; // 十进制
int a = 0b10; // 二进制 : 0b或0B标识
int a = 010; // 八进制 : 0标识
int a = 0x10; // 十六进制 : 0x或者0X标识
2.进制输出表示
printf("%i", a); // 十进制输出
printf("%o", a); // 八进制输出
printf("%x", a); // 十六进制输出
3.十进制转二进制
规律:十进制除以2取余,倒序读取
4.二进制转十进制
规律:转换原理:乘以2的幂数(幂数从0开始), 然后相加
5.二进制转八进制
规律: 三个二进制代表一个八进制位,只需要将3个二进制位转为十进制,之后再将所有的结果连接起来
6.二进制转十六进制
规律:四个二进制位代表一个十六进制位,只需要将4个二进制位转为十进制,之后再将所有的结果连接起来
7.二进制的源码/ 反码/ 补码
二进制的第一位是二进制的符号位,如果该位是0代表这个书是一个正数,如果该位是1代表这个数是一个负数
正数的源码反码补码都是一样的,三码合一
二进制的最高位我们称之为符号位
如果符号位是0代表是一个正数,
如果符号位是1代表是一个负数
10000000 00000000 00000000 00001100 (-12的原码)
11111111 11111111 11111111 11110011(反码, 符号位不变其它位取反)
11111111 11111111 11111111 11110011
+00000000 00000000 00000000 00000001
_____________________________________________
11111111 11111111 11111111 11110100(补码 , 反码+1)
结论:无论正数负数在内存中存储的都是补码
11111111 11111111 11111111 11110101 (补码)
-00000000 00000000 00000000 00000001 (-1)
_____________________________________________
11111111 11111111 11111111 11110100 (反码)
10000000 00000000 00000000 00001011
负数反码 : 最高位不变,其他位取反
负数补码 : 负数的反码+1
8.位运算(二进制运算)
/*
& 按位与 : 一假则假,任何数和1相&得到的结果还是那个数
| 按位或 : 一真则真
^ 按位异或 : 不相同为1,相同为0;
^ 规律 : 1.异或的结果和参与运算的顺序没有关系
2.相同的两个数异或等于0
3.任何一个数异或上0结果不变
4.任何一个数异或一个数两次,结果不变
~ 取反 : 0变1,1变0
~9
0000 0000 0000 0000 0000 0000 0000 1001
~1111 1111 1111 1111 1111 1111 1111 0110 (补码)
0000 0000 0000 0000 0000 0000 0000 0001
______________________________________________
1111 1111 1111 1111 1111 1111 1111 0101 (反码)
1000 0000 0000 0000 0000 0000 0000 1010
*/
9.左移(<<) 右移(>>)
左移(<<) : 左移就是用左移的数乘以2的移动次幂
注意点 : 由于左移运算,被移动的书的最高位会被抛弃(移除),所以左移有可能会改变一个数的政正负性
右移(>>) : 右移就是用右移的数除以2的移动次幂
9 >> 1 == 9 / 2(1) = 4
325

被折叠的 条评论
为什么被折叠?



