avatar

zian

A text-focused Halo theme

  • Java
  • 面试
  • 首页
  • C语音
  • liunx
  • 数据结构与算法
  • 控制台
Home 进制转换
文章

进制转换

Posted 2024-12-21 Updated 2024-12- 23
By Administrator
14~18 min read

进制转换

数据类型

#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;
}

注意:

  1. 使用 sizeof 来测量占用的字节数是不要使用具体的值来进行策略,sizeof 用来测量变量或者具体的数据类型。
  2. c 语言中 ``stdio.h`` 头文件中是没有 bool 类型的,如果需要使用 bool 数据类型需要引入 `stdbool.h` 。不引入可以使用 0 代表false ,非零的数代表 true 。一般都是用 0 代表false 1 代表true 在 stdbool 中可以这么定义的。bool 数据类型占用一个字节。
  3. 二进制,标准的 c 语言中是没有的,如果想要使用两种方法
    1. 使用 `char` 来代替,但是一般不需要符号位,所以写成 `unsigned char`
    2. 导入 `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做除法,一直除到零为止。

88acab26ca69940314f5572c68e9eec.jpg

拆解法

独特转化方法:

权位值

将数值拆解,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
C语音
License:  CC BY 4.0
Share

Further Reading

Jan 7, 2025

C语言 其他

作用域 关键字 register 在C语言中,register 关键字是一种存储类说明符,用于建议编译器将变量存储在CPU寄存器中,而不是内存中。这样做可以提高访问变量的速度,因为寄存器的访问速度通常比内存快得多。然而,这个关键字只是一个提示,编译器可以选择忽略它。 使用register关键字的变量

Jan 6, 2025

C语言 结构体

结构体 问题的引入 多个相同数据类型的数据可以用数组表示,那么,如果多个不同数据类型的数据如何用一个集合表示呢?? 前面我们所介绍的普通数据类型实际上远远未能满足我们对实际应用中的要求,比如说一个学生,可能包含的属性有年龄、姓名、分数等等,不可能用一个基本数据类型(int 、float 、char)

Dec 28, 2024

C语言 内存

内存 什么是内存 软件在运行是,临时用来存储数据的 操作系统会将内存按照字节划分为 N 多个小格子 什么是内存地址 其实就是格子的编号 32 位操作系统:以 32 位的二进制表示 64 位操作系统:以 64 位的二进制表示 内存地址的作用 快速操作内存中存储的数据 C 语言中如何获取内存地址 &变量

OLDER

原码、反码和补码以及溢出

NEWER

C语言运算符

Recently Updated

  • 其他
  • Elasticsearch 面试
  • Spring 面试
  • RabbitMQ 面试
  • Redis 面试

Trending Tags

ruoyi docker java

Contents

©2025 zian. Some rights reserved.

Using the Halo theme Chirpy