【C语言疯狂讲义】(七)C语言进制转换
1、计算机中的进制
2进制:逢二进1 0 1
8进制:逢八进1 0 1 2 3 4 5 6 7
10进制:逢十进1 默认的进制 0 - 9
16进制:逢十六进1 0 - 9 A B C D E F (内存的地址格式)
2、进制的转换问题
三个要素:
数位(0-7)、
基数(每一位能取值的个数)、
位权(数码*基数^数位)、 101 = 1*2^0+0*2^1+1*2^2
数码(每一位设置)
转换:有得时候转换为人能识别的数制,要操作计算机写计算机能够识别的语言(二进制)
10 -> 2 : 除2取余法,把10进制数除以2,然后取得余数的序列,再倒序
2 -> 10 : 所有位的位权相加 101 = 1*2^0+0*2^1+1*2^2
2 --> 16 : 4合1法, 整数部分从右向左 4位结合成一位,小数部分从左向右4位结合1位,不足部分补0
16 -->2 : 1拆4法, 16进制的1位拆成二进制的4位
2 --> 8 : 3合1
8 --> 2 : 1拆3
8 --> 10 : 8--> 2 --> 10
16 --> 10: 16 -->2 -->10
3、原码、反码和补码
1)机器码、真值
一个数的二进制的表示 机器码
把一个数的二进制转换为10进值得值 真值
2)计算数据的存储
存储的时数的补码
数是有正负性
正数:最高位 用0表示符号位
负数:最高位 用1表示符号位
3)原码、反码、补码:
正数:就是其二进制表示 +1 00000001
负数:二进制的最高位是1 -1 10000001
反码:
正数:就是其二进制表示 +1 00000001
负数:符号位不变,其他位逐位取反 -1 11111110
补码:
正数:就是其二进制表示 +1 00000001
负数:反码+1 -1 11111111
注意:补码的真值不等于原码的真值的
4、为什么要使用补码?
主要是位了优化计算机中的减法
5、补码的深入讲解
1-1 = 1+(-1)
6、位运算符
二进制数码之间的运算
6个符号
& 按位与:逐位运算,有0则为0,同1则为1
| 按位或:有1为1
^ 按位异或:相同为0,不同为1
~ 按位的取反:0变1,1变0
>> 按位右移:把一个数的所有的二进制位全部向右移动指定位数 10>>2;
注意:移出的位舍弃,高位补符号位,可能让一个数为0
<< 按位左移
把一个数的所有的二进制位全部向左移动指定位数
注意:移出的位舍弃,低位补0,可能会改变一个数的正负性
11&2
1011
& 0010
--------------
0010
技巧:
任何数和1按位&操作,得到这个数的最低位
偶数的最低位 0
奇数的最低位 1
7、变量在内存中存储的细节
内存分配给变量的存储空间是从高到低
一个变量低位低地址
高位存放高地址
8、char类型
char
char常量 ‘a‘,‘b‘,
以int型进行存储,占4个字节
char变量
以单个字节存储
取出ascii码 转换为2进制 放到一个字节
%c 取出一个字符
%d 取出整数值
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。