------- android培训、java培训、IOS培训、.Net培训、期待与您交流! ----------
本系列博客主要描述c语言基础与OC语言基础。大家可随时沟通交流。根据学习做一些笔记,也方便学习和复习巩固。
进制
二进制 0,1 逢2进1;以0b或0B开头。
八进制 0~7 逢8进1;以0开头。
十进制 0~9 逢10进1;
十六进制 0~9~A~F 逢16进1;以0x或0X开头。
进制转换要素:数位,基数,位权
数位是指数码在一个数所处的位置
7 6 5 4 3 2 1 0 ——数位
0 1 1 0 0 1 0 0 ——数码
1*2^3=8 位权=数码*基数^数位
10转2 10进制数除以2,取余数的序列再倒序
2转10 所有位权相加 101=1*2^0+0*2^1+1*2^2
2转16 4合1法 整从右到左 4合1 ,小数从左到右4合1,不足的部分补0
16转2 1拆4法 16进制的1位拆成2进制的4位
2转8 3合1法 8转2 1拆3法
例:2转10 01100001
1x2^0+1x2^5+1x2^6=1+32+64=97
原码 ,反码,补码
口诀:原码正不变,反的符号为1
反码正不变,反符号后取反
补码正不变,反符号位后取反加1
例:[+1]原=00000001 [+1]=[00000001]原=[00000001]反=[00000001]补
[-1]原=10000001 [-1]=[10000001]原=[11111110]反=[11111111]补
位运算符(二进制)
&与 |或 ~取反 ^异或 —>右移 <—左移
&按位与:两个位进行&操作 同1为1,有0为0
|按位或: 两个位进行|操作 有1为1, 同0为0
~按位取反:1变0,0变1
^异或:相同为0,不同为1
<—左移,技巧:向左移n位,相当于原数*2^n,但是会改变负数的正负性
—>右移,技巧:向右移n位,相当于原数/2^n,结果是整数。右移位,不会改变正负性
数组
数组定义格式:类型 数组名[元素个数]
遍历:按顺序查看数组的每一个元素
只能在定义数组的同时进行初始化
如果想在思念高一数组的同时初始化,数组元素必须是常量或者不写
初始化方式
int a[3] = {10, 9, 6};
int a[3] = {10,9};
int a[] = {11, 7, 6};
int a[4] = {[1]=11,[0] = 7};
常见错误
int a[];
int[4] a;
int a[b];
a = {10, 11};
a[4] = {10,9,8,5};
数组作为函数的参数,可以省略元素个数
数组作为函数的参数,传递时整个数组的地址,修改函数形参数组元素的值,会影响到外面的实参数组
数组的地址就是它第0个元素的地址,数组名就是数组的地址
&s == &s[0] == s
数组元素存放值是从小到大, 而每一个元素存值又是从大到小
因为内存寻址从大到小,所以先定义的数组的地址比后定义的地址大
基本数据类型作位函数参数是值传递
数组作为函数参数传递的是地址
当数组作为函数参数传递的时候,可以省略[]中的元素个数
当数组作为函数参数传递的时候,会自动转换成"指针类型"
而指针在当前操作系统mac 下占用8个字节
想在函数中动态计算数组的元素个数是不行的,因为指针类型占8个字节
长度=总字节数/数组元素占用的字节数
二维数组
a[i][j] 代表了一个数组有i行j列
注意:可省一维长度,二维不可省
例:int a[][4]={{0,8,9,6},{11,22,33,44},{12,22,32,42}}; 相当于 int a[3][4]={{0,8,9,6},{11,22,33,44},{12,22,32,42}}