黑马程序员——C语言进制和字符串

来源:互联网 发布:开淘宝c店 编辑:程序博客网 时间:2024/05/01 07:49
------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,则结束记数)
0 0