2021.7.15学习小记
-
(num & ( 1 << i )) 该代码适合适用于测试某个比特位是 0 还是1 .
-
若想将 x = 0000 1010 的第四位设为 1 , 则需要 x | (1 << 4)
-
若想将 x = 0000 1010 的第三位设为 0 ,则需要 x & ~( 1 << 3 )
-
内存必须要申请之后才能使用,如果使用了未申请的非法内存,此时就是“未定义行为”。
-
内存
-
0xCC VS的 debug 模式会把局部变量的后面填充上一些0xCC 以便发现问题。
-
字节序
字节序和CPU相关,主要为小端(低位在低地址上)。
int num = 0x11223344
在地址中存储为 44 33 22 11
char num = 0x12
在地址中存储为 12
char num[ ] = { 0x11 , 0x22 , 0x33 , 0x44 };
在地址中存储为 11 22 33 44 -
补码
int num = -10; 原码 0a 00 00 80 16进制
在地址中存为补码 (除符号位取反+1)f6 ff ff ff
原码 二进制为 1000 0000 0000 0000 0000 0000 1010
反码 1111 1111 1111 1111 1111 1111 0101
补码 1111 1111 1111 1111 1111 1111 0110
f f f f f f 6
因为小端模式 所以显示为 f6 ff ff ff
补码:为了让计算机能够统一 加法和减法。 -
类型转换
如果是把长的数据转为短的数据,高位不要,低位截断
如果是把短的数据转为长的数据,高位补符号位 -
n次方函数
#include<math.h>
pow ( tmp , n ) ; //tmp的n次方
- .dll就是动态链接库
很多exe程序在发布的时候 不仅仅发布exe本身 而且吧配套动态链接库一起发布 。想要运行exe就需要保证同时具备动态库。否则exe会很大。 更新时候即更新dll,便于软件 更新。 - 如果某个操作符的各个操作数属于不同类型,那么其中一个操作数转为另一个操作数的类型,否则无法进行,寻常算数转换。
long double
double
float
unsigned long int
long int
unsigned int
int - 易错代码
int main()
{
unsigned int i ;
for ( i = 9 ; i> = 0 ;i-- )
{
printf("%u\n", i );
}
}
因 i 为无符号数,直到 i=0后, i–,即0+(-1)、
0000 0000 0000 0000 0000 0000 0000 0000
1111 1111 1111 1111 1111 1111 1111 1111 相加
存储为1111 1111 1111 1111 1111 1111 1111 1111 ,看作正数
所以unsigned 类型比较容易溢出,尽量不用。