进制转换
进制转换
数据类型
#include <stdio.h>
#include <stdint.h>
#include <stdbool.h>
int main(int argc, const char* argv[]) {
// byte 一个字节的 ,
// 在 c 语言中默认是没有 byte 数据类型的,一般都是用
unsigned char a = 12;
printf("byte %u \n", sizeof(unsigned char));
printf("bype %u \n", sizeof(a));
// 另一种方式 导入 <stdint.h> 使用该头文件中提供的, uint_t 8 数据类型 , 底层也是用 unsigned char 的
uint8_t b = 12;
printf("bype %u \n", sizeof(b));
// 拓展:stdint.h 中定义堆的数据类型,
// 比如 uint8_t 代表 无符号的byte | uint16_t 代表无符号的:short | uint32_t 代表无符号的 int | uint64_t 代表无符号的 long
// stdint 中定义这些数据,是为了在不同平台下数据占用的字节数是一样的,(适配不同平台)
// short 占用两个字节
short c = 12;
printf("short %zu \n", sizeof(c));
printf("short %zu \n", sizeof(short));
// int 占用四个字节
int d = 19;
printf("int %zu \n", sizeof(d));
printf("int %zu \n", sizeof(int));
// long 占用八个字节
long e = 19;
printf("long %zu \n", sizeof(e));
printf("long %zu \n", sizeof(long));
// long long 一般占用 8 字节
long long f = 19;
printf("long long %zu \n", sizeof(f));
printf("long long %zu \n", sizeof(long long ));
// float 4 个字节
float g = 1.2;
printf("float %zu \n", sizeof(g));
printf("float %zu \n", sizeof(float));
// double 8 个字节
double h = 1.2;
printf("double %zu \n", sizeof(h));
printf("double %zu \n", sizeof(double));
// char 1 个字节
char j = 'a';
printf("char %zu \n", sizeof(j));
printf("char %zu \n", sizeof(char));
// bool 1 个字节 ,如果需要使用 bool 数据类型,需要引入 <stdbool.h> 头文件
bool i = true;
printf("bool %zu \n", sizeof(i));
printf("bool %zu \n", sizeof(bool));
printf("true %zu \n", sizeof(true)); // true 4 , 在使用 sizeof 测量 bool 值是,默认会将 true 转换 1(int) false 0 (int ) ,所以这里占用四个字节
printf("true= %d \n", true); //#define true 1
printf("false = %d \n", false); // #define false 0
return 0;
}
注意:
- 使用 sizeof 来测量占用的字节数是不要使用具体的值来进行策略,sizeof 用来测量变量或者具体的数据类型。
- c 语言中 ``stdio.h`` 头文件中是没有 bool 类型的,如果需要使用 bool 数据类型需要引入 `stdbool.h` 。不引入可以使用 0 代表false ,非零的数代表 true 。一般都是用 0 代表false 1 代表true 在 stdbool 中可以这么定义的。bool 数据类型占用一个字节。
- 二进制,标准的 c 语言中是没有的,如果想要使用两种方法
- 使用 `char` 来代替,但是一般不需要符号位,所以写成 `unsigned char`
- 导入 `stdint.h` ,使用 `uint_8` 来代替,底层也是用 `unsigned char` 的。
数据类型 | 字节数 | 格式符 | 数据范围 | 最小值宏 | 最大值宏 |
---|---|---|---|---|---|
short(短整型) | 2 | %hd | -2^15^~ 2^15^-1 (-32768 ~ 32767) | SHRT_MIN | SHRT_MAX |
int(整型) | 4 | %d | -2**^31^ ~ 2^31^-1 (-2147483648 ~ 2147483647)** | INT_MIN | INT_MAX |
long(长整型) | 4 | %ld | -2^31^~ 2^31^-1 (-2147483648 ~ 2147483647) | LONG_MIN | LONG_MAX |
long long(长长整型) | 8 | %lld | -2^63^~ 2^63^-1 | LLONG_MIN | LLONG_MAX |
unsigned short(无符号 短整型) | 同 short | %hu | 0~ 2^16^-1 (0 ~ 65535) | 0 | USHRT_MAX |
unsigned int(无符号 整型) | 同 int | %u | 0~ 2^32^-1 (0 ~ 4294967295) | 0 | UINT_MAX |
unsigned long(无符号 长整型) | 同 long | %lu | 0~ 2^32^-1 (0 ~ 4294967295) | 0 | ULONG_MAX |
unsigned long long(无符号 长长整型) | 同 long long | %llu | 0~ 2^64^-1 | 0 | ULLONG_MAX |
上表中列出的占用字节数和取值范围,是大多数情况下各种类型的取值。
由于,C 标准没有具体规定以上各类数据所占用的字节数。因此,在不同系统、编译器下,数据类型占用的字节数会有所不同。
比如:int 类型,在 Turbo C 环境占 2 字节,取值范围与 short 相同。 而在 Visual C 环境下是 4 字节。
再如:long 类型,相同的 gcc 编译器下,在 Windows 系统中占 4 字节,而在 Linux 系统中占 8 字节。
可以使用 sizeof 查看 数据类型 占用内存的大小。
进制转换
十进制转换二进制
十进制转换为二进制可以使用辗转相除法和拆解法
辗转相除法:拿着数值一直对2做除法,一直除到零为止。
拆解法
独特转化方法:
权位值
将数值拆解,2次数。
2^7 2^6 2^5 2^4 2^3 2^2 2^1 2^0
128 64 32 16 8 4 2 1
独特转化方法:将数字进行拆解,必须按最近最大权位值拆解,将有数字的位进行置即可。
100 = 64 + 32 + 4
64 32 16 8 4 2 1
1 1 0 0 1 0 0
819 = 512 + 256 + 32 + 16 + 2 + 1 转化二进制:1 1 0 0 1 1 0 0 1 1
二进制转八进制
使用组合的方式,从右边开始看,每三个二进制为一个把进制为
比如:
1000 1000 ————> 010 001 000 ————> 0210
二进制转十六进制
使用组合的方式,从右边开始看,每四个个二进制为一个把进制为
比如:
1000 1000 ————> 1000 1000 ————> 0x88
License:
CC BY 4.0