计算机进制理解

来源:互联网 发布:windows返回快捷键 编辑:程序博客网 时间:2024/05/17 07:35

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

0 0
原创粉丝点击