目录
进制转换
二进制数字由:0~1组成的
八进制的每一位数字由:0~7组成的
十进制的每一位由:0~9组成
十六进制每一位由:0~15组成,可能就得区分 (倒也不会从10~15依次用a b c d e f 俩表示十六进制的10就是a);
二进制转十进制
十进制转二进制。
二进制转八进制
那就相当方便了(算的时候尽量从右往左算不然搞忘了容易出错,而且都是从0次方开始哦)
转十六进制道理一样,
每四个表示一位计算完后放在一起就欧了
八进制转十进制
十六进制和八进制差不多
但是开头是(0x)是零埃克斯,每一位乘上16的次方然后相加(从右至做运算)
0开头和0x开头数字的含义
0开头的数字表示后面的数字都是8进制的数字
0x开头的数字表示后面的数字都是16进制的数字
源码,反码,补码。
正整数的,源码,反码,补码,全都一样。
负整数的反码:
符号位不变(开头的那个1),其他位置取反(0变1,1变0);
负整数的补码:
在最右侧加1,满2就进一位。1+1满2进一位最右侧那个变成0,然后进一位,进一位一看是0加上1不满2就不用进了,直接就是1.
源码和补码的相互转换:
直接 取反+1就ok。(符号位不能变哦)
以上所述针对有符号整数
%d会当作有符号整数来打印所以结果是正确的,但如果用%u就不对了。
整形的存放
整形的计算原理
采用的是补码运算,由于计算器只能执行加法运算,所以在减法运算时实际上是,加一个负数
但是打印的是源码,所以在需要你手动计算时,用补码操作完了记得转换成源码
移位操作符:(也是补码进行操作)
位移操作符的操作数只能是整数
“ << ” (左移操作符)一个操作符并不能改变a本身,类似于a=10,b=a+1,所以b=11,a还是10.
左移操作符的效果:
使被左移的值,翻一倍的效果就是乘2(这是左移一位),负数也是乘2符号不变。
右移操作符:“ >> ”
分两种,取决于编译器。
效果就是除2
使用位移操作符时应使用正整数
位操作符:(用补码进行计算,算完了记得还回去)
在还回去的时候符号位不变。操作数必须得是整数
用补码执行以下操作时,符号位可以变
& 按位与: 规则:只要有一个0则为0(两个0也是0),否则就为1(两个都是1就为1)
| 按位或:规则:只要有一个1就是1 ,两个都是0才是0.
^ 按位异或: 规则:相同为0,相异为1.
~ 按位取反: 0变1,1变0(这个的操作数只有一个 )
unsigned int ,关注的是内存的的补码。
逗号表达式:
从左至右依次执行,但只取最后一个表达式的结果。无论这个逗号表达式在哪,该执行的执行,只看最后一个表达式(关键)就行。
结构体:
关键字:struct ;(后面加变量名就行)
结构体里面可以放多种类型。
列如:
注意
1、末尾的大括号后要有分号。
2、结构体里面也可以放结构体,(别老想着一直套娃没意义)。
3、struct Student 只是创建了一个类型,类似于Int(类型),还不能使用。再用这个类型创建一个变量就能使用了。
结构体初始化;
指定顺序初始化:(在需要指定的前面加“ . ”)
这也是相当于创建结构体变量了。
结构体的输入输出:
s1为选用变量,.age为选用变量里面的某个变量。
scanf 那里就只是修改了,年龄的值,其他值不变,如有需要可自行添加照则写就行,用逗号隔开。
结构体的访问,分两种
1、直接访问
结构体成员的直接访问是通过点操作符(.)访问的。点操作符接受两个操作数。如下所示:
2、指针的间接访问
有时候我们得到的不是⼀个结构体变量,⽽是得到了⼀个指向结构体的指针。如下所示
下面这两种都可以访问。
运算符优先级:
来自C++官网。
整形提升:
根据首位来提升,也就是说如果第一位是1(从左至右),那么 提升时补1.
算术转换:
不同类型之间运算的的转换,向上转,int + long int ,把 int 转为long int 运算。