day01
c语言基础
内存分析
- 二进制: 0b\0B
- 八进制: 0
- 十六进制: 0x\0X
进制转换练习
十进制:12
二进制:逢2进1--->>>>1100
八进制:逢8进1--->>>>14
十六进制:逢16进1--->>>>C
10 A,11 B,12 C,13 D,14 E,15 F
printf不同进制的输出方式
- %d 有符号十进制整数
- %o 无符号的八进制整数
- %x 无符号的十六进制整数
- %u 无符号的十进制整数
- %c 输出一个字符串
- %s 输出一个或多个字符
- %f 以小数输出单、双精度数,默认6位小数
- %e 以标准指数形式输出单、双精度数,6位小数
总结
- %d\%i 十进制形式输出整数
- %c 输出字符
- %p 输出地址
- %f 输出小数
- %o 八进制形式输出整数
- %x 十六进制形式输出整数
内存分析
// 一个int类型数据占据4个字节、32bit
// 0000 0000 0000 0000 0000 0000 0000 1100
int number = 12; // 1100
// 0000 0000 0000 0000 0000 0000 0000 1101
int number2 = 13; // 1101
字节 变量 内容
ffc1
ffc2 number2 0000 1101
ffc3 0000 0000
ffc4 0000 0000
ffc5 0000 0000
ffc6 number 0000 1100
ffc7 0000 0000
ffc8 0000 0000
ffc9 0000 0000
总结
内存寻址由大的内存地址开始分配,并且存放数据的时候也是从大的内存地址开始存放
变量的地址就是它的第一个字节的地址
.089 == 0.089
aeb == a*10的b次方
二进制转换十进制
0b1100 == 0*2(0)+0*2(1)+1*2(2)+1*2(3)
= 0 + 0 + 4 + 8 = 12
十进制转换二进制
67 = 64 + 2 + 1
= 2的6次方+2的1次方+2的0次方
= 0b1000000 + 0b10 + 0b1
= 0b1000011
n位二进制的取值范围
2位二进位的取值范围 0~3
00 0
01 1
10 2
11 3
2位二进位的取值范围 0~7
000 0
001 1
010 2
011 3
100 4
101 5
110 6
111 7
0~2^n-1 == 0到2的n次方-1
最大值是2^n次方-1
负数和取值范围
最高位0正数
最高位1负数
负数涉及到反码和补码
负数的取值范围
4个字节 -> 31bit
最高位是符号位
正数 0~2的31次方-1
负数 -2的31次方
类型说明符(为了修饰int类型)
- short 2个字节 %d
- short int = short
- long 8个字节 %ld == l
- long == long int <扩充的整型) ==l
- long long int 8个字节 %lld(64位上8个字节) 32位编译器上会有区别 == ll
- long long int == long long == ll
- signed == signed int 有符号:正数、0、负数 2的31次方-1 ,最高位要当做符号位
解析
signed -2的23次方- 2的31次方-1
unsigned 0 到 2的32次方-1
unsigned == unsigned int 无符号: 0、正数(不把最高位拿到当符号位,正数的最大值会变大 2的32次方-1 最高位不当做符号位
int 默认就是有符号位,int最高位当做符号位
一般人不写signed只写unsigned
long unsigned int c = 34343;
long unsigned = long unsigned int
short unsigned = short unsigned int
singned和unsigned不会修改数据长度
以后需要研究的函数
// 输出一个整数的二进制存储形式
void putBinary(int n)
{
int bits = sizeof(n) * 8;
while (bits-->0) {
printf("%d", n>>bits&1);
if (bits%4==0) printf(" ");
}
printf("\n");
}
位运算
& 与
| 或
^ 异或
~ 取反
>> 右移
<< 左移
sizeOf
用来计算一个变量或者一个常量、一种数据类型所占的内存字节数。
逻辑运算符
条件1&&条件2 两个条件都为真才返回1
条件1||条件2 有一个条件为真才返回1
!条件