二进制原码、反码、补码

原码

反码

补码:反码+1

如何从补码到原数:(补码-1)->01对调(表示正负号的不对调)-> 二进制相加

ASCII编码

数字=字符时,其值是该字符对应的ASCII编码

字符串=数字时同理

条件表达式

expr1 ? exp2:expr3;

if expr1 is True then expr2 else expr3

时间复杂度

数组

1、正确的初始化

int n[5] = {1,2,3,4,5};

错误示例:

不要使用超过数组长度的序号:

int a[100]; a[100] = 40;

虽然长度是100,但序号是[0,99]

2、数组在函数的传递:名称且不带括号

int myArray[24];
void myFunctionRef(int[], int length)
myFunctionRef( myArray, 24 );

字符串数组

char string1[] = { 'f', 'i', 'r', 's', 't', '\0' }

数组的名字就是第一个元素的地址

char *s = "SPEIT"; *s = 'c';

在C语言中,字符串常量是不可更改的。s 是一个指向字符串常量 "SPEIT" 的指针,当你尝试修改这个字符串常量中的字符时,会导致错误。

修改的话应定义为字符串数组

char s[]= "SPEIT"; s[0] = 'c';

多维数组

二维数组在初始化时一般只确定列的个数

char vowels[][5] = {
{'A', 'E', 'I', 'O', 'U'},
{'a', 'e', 'i', 'o', 'u'}
};

类型强制转换

注意:把值从较高类型转换到较低类型,会引起数据的丢失

(最低类型)bool -> char -> unsigned char -> short -> unsigned short -> int -> unsigned int -> long int ->unsigned long -> float -> double -> long double ;

数值调用和实例调用(Call by Reference)

Call by Reference

void addone(int *n) {
(*n)++;
}

取地址:&

a时=是数组名称,a[1]中的[]其实也是一种取值运算

指针

1、初始化:Initialize pointers to 0, NULL, or an address

2、错误示例:

int *c;
int k=5;
*c =5;

3、const

int *const myPtr = &x;
• Type int *const - constant pointer to an int
const int *myPtr = &x;
• Regular pointer to a const int, *myPtr can not be reassigned with a value
const int *const Ptr = &x;
const pointer to a const int

4、b[n] = *(b + n)

5、对一个二维数组同理:

b[m][n] = *(*(b+m)+n);

6、指针的指针

int (*p)[n];

创建了行数不确定,列数为n的数组;指针p指向该数组的第一个值

int *p[n];

创建了n个内容为指针的数组;