复习难点
1.float类型在内存中的存储方式
指数位的计算方法,找到化为二进制数后的浮点数中第一个1的位置,如数12.25中应该将小数点左移3位,移到浮点数中第一个1的位置,再比如数0.25,化为二进制为0.01,移到第一个1的位置,应该是向右移2位,那么,得到移动位数后,我们应该怎样计算指数位的值呢?
首先,我们应该明确指数位起步就有值,大小是127,如果我们得到应该左移三位,那么就应该给127+3,如果我们得到应该右移三位,就应该给127-3,最后将所得到的值化为二进制数存放在指数位,这里需要注意指数位是无符号整数,范围是0-255,尾数位存储的是小数点以后的数字,不足位补0,如12.25在内存中的存储应该是符号位为0,指数位为1000 0011,尾数位为1000 1000 0000 0000 0000 000,0.25在内存中的存储应该是符号位为0,指数位 0111 1101,尾数位为0000 0000 0000 0000 0000 000
2.类型转换
(下图为隐式类型转换)
代码检测:
#include <iostream>
#include <string>
using namespace std;
int main()
{
//不同类型的变量相加,应该先转换类型,将类型转换为同一个类型,在相加
unsigned char i = -3; //1111 1101
char j = 2; //0000 0010
cout << typeid(i + j).name() << endl;
//如上,应该先将i,j转换为int类型,将i转换为253,将j转换为2,相加得到值为255
printf("%d\n", i + j); //255
unsigned char a = 2; //0000 0010
char b = -3; //1111 1101
cout << typeid(a + b).name() << endl;
//如上,将a转换为2.将b转换为-3,相加得到-1
printf("%d\n", a + b); //-1
//只有无符号的负数转换为别的类型时,可能会发生变化
}
3.优先级
优先级1
运算符() 含义:圆括号
[] 含义:下表运算符
-> 含义:指向结构体成员运算符
. 含义:结构体成员运算符
优先级2
运算符 ! 含义:逻辑非运算符
~ 含义:按位取反运算符
++ 含义:自增运算符
-- 含义:自减运算符
- 含义:负号运算符
(类型)含义:类型转换运算符
* 含义:指针运算符
& 含义:取地址运算符
sizeof 含义:长度运算符
优先级3
运算符:* 含义:乘法运算符
/ 含义:除法运算符
% 含义:求余运算符
优先级4
运算符:+ 含义:加法运算符
- 含义:减法运算符
优先级5
运算符:<< 含义:左移运算符
>> 含义:右移运算符
优先级6
运算符:< <= > >= 含义:关系运算符
优先级7
运算符:== 含义:等于运算符
!= 含义:不等于运算符
优先级8
运算符:& 含义:按位与运算符
优先级9
运算符:^ 含义:按位异或运算符
优先级10
运算符:| 含义:按位或运算符
优先级11
运算符:&& 含义:逻辑与运算符
优先级12
运算符:|| 含义:逻辑或运算符
优先级13
运算符:? : 含义:条件运算符
优先级14
运算符:= += -= *= /= %= >>= <<= &= ^= |= 含义:赋值运算符
优先级15
运算符:, 含义:逗号运算符
4.数组
int arr[10] 这是一个数组名为arr,存储10个整型元素
&arr+1 取数组arr的地址,就是代表整个数组,+1后就会移动一个数组的大小
arr+1 代表数组下标为1的地址
int arr[3][4] 这是一个二维数组,存储10行10列的整型数
如图:在二维数组中, &arr+1代表的是arr最后的位置,(arr+1)代表的是这个二维数组中存储的一维数组,因此代表就是第二行的第一元素的地址,这个位置同样可以用&arr[0]+1来表示,同理,arr[0]+1和&arr[0][0]+1代表的是第一行第二个元素的地址。