day02
1 进制
1.1 常见进制
(1)二进制:0、1,满2进1。
(2)十进制:0 - 9,满10进1。
(1)十六进制:0 - 9及A-F,满16进1。十六进制中,除了 0 到 9 十个数字外,还引入了字母,以便表示超过9的值。字母A对应十进制的10,字母B对应十进制的11,字母 C、D、E、F 分别对应十进制的 12、13、14、15。
1.2 C语言中使用不同进制表示整数
(1)二进制:以0b或0B开头表示。
(2)十进制:正常数字表示。
(3)十六进制:以0x或0X开头表示,此处的A-F不区分大小写。
代码示例:
1.3 输出格式
%d :十进制整数。
%x :十六进制整数。
%#x :显示前缀 0x 的十六进制整数。
%#X :显示前缀 0X 的十六进制整数。
代码示例
#include <stdio.h>
int main()
{
int x = 100;
printf("十进制:%d \n", x);
printf("十六进制:%x \n", x);
printf("十六进制(0x开头):%#x \n", x);
printf("十六进制(0X开头):%#X \n", x);
return 0;
}
输出结果
十进制:100
十六进制:64
十六进制(0x开头):0x64
十六进制(0X开头):0X64
1.4 原码、反码、补码
1)*原码*
原码的表示与机器数真值表示的一样,即用第一位表示符号,其余位表示数值。
Ø 正数的原码:就是它对应的二进制数。
Ø 负数的原码:它的绝对值对应的二进制数,且最左边位变为1。
Ø 0的原码:仍然是0。
十进制的正负1,用8位二进制的原码表示如下:
+1 原码:[ 0000 0001 ]
-1 原码:[ 1000 0001 ]
2)*反码*
Ø 正数的反码:和原码相同。
Ø 负数的反码:在其原码的基础上,符号位不变,其余各位取反。
Ø 0的反码:仍然是0。
十进制的正负1,用8位二进制的反码表示如下:
+1 原码:[ 0000 0001 ] 反码:[ 0000 0001 ]
-1 原码:[ 1000 0001 ] 反码:[ 1111 1110 ]
需要注意的是,反码通常是用来由原码求补码或者由补码求原码的过渡码。
3)*补码*
Ø 正数的补码:和原码、反码相同。
Ø 负数的补码:反码的基础上加1。
Ø 0的补码:仍然是0。
十进制的正负1,用8位二进制的补码表示如下:
+1 原码:[ 0000 0001 ] 反码:[ 0000 0001 ] 补码:[ 0000 0001 ]
-1 原码:[ 1000 0001 ] 反码:[ 1111 1110 ] 补码:[ 1111 1111 ]
4)*总结*
(1)正数的原码、反码、补码都一样,三码合一。
(2)负数的反码:它的原码符号位不变,其它位取反(0 -> 1,1 -> 0);负数的补码:它的反码+1。
(3)0的反码,补码都是0。
2 数据类型
2.1整型的类型
类型 | 存储大小 | 值范围 |
---|---|---|
short signed short | 2 字节 | -32,768 (- 2^15)到 32,767 (2^15 -1) |
unsigned short | 2 字节 | 0 到 65,535 (2^16 - 1) |
signed int | 16位:2 字节32位:4 字节 | 16位:-32,768 (- 2^15 ) 到 32,767 (2^15-1)32位:-2,147,483,648 (- 2^31) 到 2,147,483,647 (2^31 -1) |
unsigned int | 16位:2 字节32位:4 字节 | 16位:0 到 65,535 (2^16-1) 32位:0 到 4,294,967,295 (2^32 -1) |
long signed long | 32位:4 字节 64位:8 字节 | 32位:-2,147,483,648 (- 2^31) 到 2,147,483,647 (2^31 - 1)64位:9223372036854775808(-2^63) 到9223372036854775807 (2^63-1) |
unsigned long | 4 或 8 字节 | 32位:0 到 4,294,967,295 (2^32 - 1)64位:0 ~ 18446744073709551615 (2^64 - 1) |
long long signed long long | 8字节 | 9223372036854775808(-2^63) 到9223372036854775807 (2^63-1) |
signed long long | 8 字节 | 0 ~ 18446744073709551615 (2^64 - 1) |
关于存储大小单位:
bit(位):计算机中的最小存储单位,表示一个二进制位。
byte(字节):计算机中基本存储单元,1byte = 8bit。
2.1.1 字面量后缀
2.1.2 格式占位符
(1)%d 对应 int 类型,%u 对应 unsigned int 类型。
(2)%hd 对应 short 类型,%hu 对应 unsigned short 类型。
(3)%ld 对应 long 类型,%lu 对应 unsigned long 类型。
(4)%lld 对应 long long 类型,%llu 对应 unsigned long long 类型。
2.2浮点类型
类型 | 存储大小 | 值范围 | 有效小数位数 |
---|---|---|---|
float 单精度 | 4 字节 | 1.2E-38 到 3.4E+38 | 6 ~ 9 |
double 双精度 | 8 字节 | 2.3E-308 到 1.7E+308 | 15 ~18 |
long double 长双精度 | 32位:10字节64位:16字节 | 32位:与 double 相同或更大64位:3.4E-4932到1.2E+4932 | 18或更多 |
2.2.1 字面量后缀
(1)浮点数字面量默认是double型,
(1)如果需要表示float类型字面量,须加后缀 f 或 F。
(2)如果需要表示long double类型字面量,需加后缀 l 或 L。
2.3字符类型
(1)char类型的字面量是用单引号括起来的单个字符。
(1)可以使用转义字符 \ 表示特殊含义的字符。
转义字符 | 说明 |
---|---|
\b | 退格 |
\n | 换行符 |
\r | 回车符 |
\t | 制表符 |
\” | 双引号 |
\’ | 单引号 |
\ | 反斜杠 |
2.3.1 格式占位符
使用%c表示char类型。
2.3.2 ASCII码介绍
空格“SPACE” 是32(二进制00100000)
大写的字母A是65(二进制01000001)
2.4 布尔类型
布尔值用于表示真、假两种状态,通常用于逻辑运算和条件判断。
2.4.1 布尔类型一
#include <stdio.h>
// 宏定义
#define BOOL int
#define TURE 1
#define FALSE 0
int main()
{
// 使用整型表示真假两种状态
// int isPass = 0;
// int isOk = 1;
// 借助于宏定义
BOOL isPass = FALSE;
BOOL isOk = TURE;
printf("isPass=%d, isOk=%d \n", isPass, isOk);
if (isPass)
{
printf("Pass");
}
if (isOk)
{
printf("Ok");
}
return 0;
}
2.4.2 布尔类型二
#include <stdio.h>
int main()
{
// 使用 _BOOL 类型
_Bool isPass = 0;
//_Bool isOk = 1;
_Bool isOk = -4;
printf("isPass=%d, isOk=%d \n", isPass, isOk);
if (isPass)
{
printf("Pass");
}
if (isOk)
{
printf("Ok");
}# day03
### 1.1 **获取数据的存储大小**
使用sizeof 可以获取数据类型或变量、字面量的存储大小,单位是字节。sizeof返回一个size_t类型的无符号整数值,格式占位符是 %zu。
案例演示:
```c
#include <stdio.h>
int main()
{
// 计算数据类型的大小, 必须使用括号将数据类型关键字包裹起来
printf("char:%zu \n", sizeof(char)); // char:1
printf("short:%zu \n", sizeof(short));