------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
1.进制问题:
二进制:0B 开头 eg:0B11 代表11的二进制
八进制:0开头 eg:011 代表11的八进制
十六进制:0x开头 eg: 0x11 代表11的十六进制
2.变量内存存储细节
内存寻址:地址从大到小(例如从ffc9开始给变量分配地址,一直到ffc1)。
变量地址:地址从小到大(ffc2是变量number2的地址,ffc6是变量number的地址)。
.03相当于0.03
3.进制问题:
n位二进制取值范围:2的n次方减1
二进制表示负数问题(正数的补码与原码完全相同,负数的补码是其反码加1):
整数:最高位为0
负数:最高位为1(首先将正数二进制取反码,然后再加1为补码,则补码就为此正数的负数);
eg:5的二进制为0000 0101 反码为1111 1010 补码为1111 1011 则此代表-5
具体看出负几:1111 1011:首先减1为 1111 1010 然后取反为 0000 0101 则代表-5 (减一取反)
4.位运算
与运算:相同为1,不同为0 (可以通过此方法获取某个位的数值。eg:与1,如果结果为1,则该位为1,否则为0)
或运算:有1则为1,否则为0
异或:^ 相同为0,不同为1(多个异或时,顺序可以交换;任何值与0异或都为本身)
按位取反:~ 将二进制所有位取反 (eg:0000 1010 按位取反为 1111 0101)
左移:<< 将二进制数左移,高位丢弃,低位补0(左移n位,结果为该数值乘2的n次方)
右移:>> 高位补0,低位丢弃(结果为该数值除以2的n次方 如果是负数,则最高位补1)
eg:使用异或运算交换两变量值:
int c=9,a=1;
a=c^a;
c=c^a;
a=c^a;
printf("%d,%d\n",a,c);
5.单引号'' 和双引号""区别:
'' :单引号只能扩住单字节的字符(ASCII表中都是单字节)
"" :双引号扩住的是字符串
6.字符串问题
定义:字符串由字符数组组成;
字符数组和字符串区别:
字符串一定以\0为结束符
eg:char name[10]="jack";(此字符串占有5个字节,由j a c k \0 共5个元素组成)
在内存中存储时,首先转化为字符,然后字符根据ASCII码形式在内存中存储。
指针字符串,指向的地址是首字符:
eg: char *name="it";//name指针指向的是i的地址
注:\0后面加数字,他们会结合一起,\00也是。
7.记数问题:
sizeof:计算所占内存。
strlen:计算字符串长度(计算的是字符数,不包括\0。如果遇到\0,则结束记数)