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、正数
signed与unsigned的区别: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;
}