黑马程序员——C语言-2:内存剖析

来源:互联网 发布:网络攻防大赛平台 编辑:程序博客网 时间:2024/06/06 09:21

————————java培训、Andoroid培训、IOS培训、.Net培训、期待与您交流!————————

进制

int number=10;//默认情况下是10进制int number2=0B1100;//0b或者0B开头是二进制int number3=014;//0开头是8进制printf("%d",number);//%d表示按10进制输出number值


%d表示以带符号的10进制输出整数
%o表示不带符号的8进制输出整数
%x表示不带符号的16进制输出整数
%c表示输出一个字符
%s表示输出一个字符串
%u表示不带符号位的10进制形式输出整数
%f表示以小数形式输出单、双精度数,默认输出6位小数
%e表示以标准形式输出单、双精度数,数字部分小数位数为6位

%d表示以带符号的10进制输出整数
%o表示不带符号的8进制输出整数
%x
表示不带符号的16进制输出整数
%c表示输出一个字符
%s表示输出一个字符串
%u表示不带符号位的10进制形式输出整数
%f表示以小数形式输出单、双精度数,默认输出6位小数
%e表示以标准形式输出单、双精度数,数字部分小数位数为6位

取值范围
 类型 存储空间(64位编译器) 取值范围 char 1B(8bit) -2的7次方——2的7次方-1 int 4B(32bit) 2的31次方——2的31次方-1 float 4B(32bit) 2的31次方——2的31次方-1 double 8B(64bit)1.7*10的-308次方——1.7*10的308次方
-1.7*10的308次方——3.4*10的-38次方

位运算
&:对应的两个二进制位均为1时,结果位为1,否则0。与1相&保持原位,与0相&就变为0
比如9&5等价为1001&0101=1


|:对应的两个二进制有一个为1时,结果位为1,否则0。
比如9|5等价位1001|0101=1101,结果为13


^:对应的二进制位相异时,结果为1,否则为0
比如9^5等价为1001^0101=1100,结果为12
相同数值进行异或,结果为0,任何数值和0异或还是原来的数值,a^b^a=b


~:将对应的二进制位按位取反
比如~9等价为~0000 0000 0000 0000 0000 0000 0000 1001
则补码为1111 1111 1111 1111 1111 1111 1111 0101,转换为10进制为-10


<<:左移
比如9<<1,就是9*2=18,9<<2,就是9*2*2=36,9<<n就是9*2的n次方


>>:右移
比如8>>1,就是8/2=4,8>>2,就是8/2/2=2,8>>n就是8/2的n次方


代码实现

int main(){    printf("%d\n",9&5);//与运算 1    printf("%d\n",9|5);//或运算 13    printf("%d\n",9^5);//异或 12    printf("%d\n",~9);//取反 -10    printf("%d\n",9<<1);//左移 18    printf("%d\n",8>>2);//右移 2    return 0;}


使用位异或运算符交换两个变量的值(不使用第三方变量)

第一种方法:

    int a=10;    int b=11;    printf("a=%d,b=%d\n",b,a);


第二种方法:

    int a=10;    int b=11;    a=b-a;    b=b-a;    a=b+a;    printf("a=%d,b=%d\n",a,b);



第3种方法:

    int a=10;    int b=11;    a=a^b;    b=a^b;    a=a^b;    printf("a=%d,b=%d\n",a,b);



用&判断奇偶性

    int a=11;    if(a&1)    {        printf("这是一个奇数\n");//a&1==1    }    else    {       printf("这是一个偶数\n");//a&0==0    }


输出整数在内存中的二进制形式
void printBinary(int n){   int temp=(sizeof(n)<<3)-1;//根据编译器去决定位数   int value;   while(temp>=0)  {     value=n>>temp&1;     printf("%d",value);     if(temp%4==0)     {          printf(" ");     }     temp--;   }  printf("\n");}


大写转换
char upper(char c){   if(c>='a'&&c<='z')         return c-('a'-'A');   return c;}void main(){    char cc=upper('w');    printf("%d\n",cc);}



char类型

常见错误

char c=a;char c="a";char c='男';char c='ABCD';

使用

printf("%d",'a');printf("%c",68);


转义字符

\n:回车换行

\t:跳到下一个TAB位置

\\:一个反斜线字符

\':一个单引号字符




 
0 0
原创粉丝点击