C 语言中的内存分析

一、进制

我们需要了解的4中进制:二进制、八进制、十进制、十六进制

#include <stdio.h>

int main()

{

         //默认情况下是十进制

         intnumber = 12;

         //二进制

         intnumber2=0b1100;

         //八进制

         intnumber3 = 014;

         //十六进制

         intnumber = 0xc;

         return0;

}

Printf以不同进制形式输出的类型:

%d 通常以十进制输出一个整数

%o通常以八进制输出一个整数

%x通常以十六进制输出一个整数

%u 以不带符号的十进制输出整数

%c 输出一个字符

%s 输出一个或者多个字符串

%f 以小数形式输出单双度数值,默认情况下是6

%e移标准指数形式输出单双精度数,数字部分小水位数为6

任何数据在内存中都是以二进制的形式存在的!

                一个int类型数据占据4个字节、32bit

例如:

                Int number=12

              在内存中显示为:

              0000  0000  0000  0000 0000  0000  0000 1100

N位二进制的取值范围:

2位二进制位的取值范围:0~3

3位二进制位的取值范围:0~7

N为二进制位的取值范围:2n-1

 

把一个整数以二进制输出的代码测试:

Void putBinary(intn)

{

              Int bits = sizeof(n)*8-1;

              While(bite>=0){

              Printf(“%d”,n>>bit&1);

              If( bits%4==0)

              Printf(“ ”);

}

Printf(“\n”);

}

二、数据类型的取值范围:

Char-----1个字节---8bit---取值范围:-27~27-1

Int-------4个字节---32bit---取值范围:-231-231-1

Float----4个字节----32bit---取值范围:3.4e-38~3.4e38||-3.4e38~-3.4e-38

Double---8个字节---64bit—取值范围:1.7e-308~1.7e308||-1.7e308~1.7e-308三、类三、型说明符:

Int --------4个字节-----------%d

short --------4个字节-----------%d

long --------8个字节-----------%ld

long long ----8个字节-------%lld

signed有符号:正数、0、负数

unsigned无符号:包含0、正数

signedunsigned的区别:signed最高位要当做符号位;unsigned最高位不要当作符号位。

四、位运算

1. &按位与

例如:

9&5

        把数据转化成二进制进行与运算

2. |按位或

例如:

9|5

 把数据转化成二进制进行或运算

3. ^按位异或:只要两个进制位不行同就为1相同就位0

例如:

9^5

       把数据转化成二进制进行异或运算

              N^N 结果为0

              任何数值跟0异或得到原来的数值         

4. ~按位去反

       例如:

                     ~9

   9的所有二进制位都进行取反;

5.<<左移

       把某个整数的二进制位全部往左移动N位高位丢弃低位补0

6. >>右移

       把某个整数的二进制位全部往右移动N位保持符号位不变

五、char

//单引号‘’只能括注单字节的字符

//Char c=’;这个是错误的写法

//char c = “A ”;这个也是错误写法

//Char c = A ; 这个也是错误的写法

Char可以当作整数来用,它的取值范围为:-128~127

转义字符:

\n                 换行                 ASCII的值为10

\t            跳到下一个tab位置        ASCII的值为9

\\             代表一个反斜线字符       ASCII的值为92

\’                  代表一个单引号字符                 ASCII的值为39

 

 

将一个字母的大小写进行转换

大写upper

小写lowwer

Char upper(char c)

{

       If(c>=’a’&&c<=’z’)

              return  c-32;

       elseif

              return  c;

}