C语言-常见进制(二、八、十、十六进制)

一、进制的分类

十进制(decimal)

  • 数字组成:0-9
  • 进位规则:满十进一
  • C 语言的整数默认都是十进制数

二进制(binary)

  • 数字组成:0-1
  • 进位规则:满二进一,以0b0B开头
int x = 0b10; // 十进制的数字2赋值给变量x

八进制(octal)

  • 数字组成:0-7
  • 进位规则:满八进一,以数字0开头表示
int x = 010; // 十进制的数字8赋值给变量x

十六进制

  • 数字组成:0-9,a-f
  • 进位规则:满十六进一,以0x0X开头表示。此处的 a-f 不区分大小写
int x = 0x10; // 十进制的数字16赋值给变量x

二、常见的进制换算

十进制二进制八进制十六进制
0000
1111
21022
31133
410044
510155
611066
711177
81000108
91001119
10101012a或A
11101113b或B
12110014c或C
13110115d或D
14111016e或E
15111117f或F
16100002010

三、输出格式控制

1.不同的进制只是整数的书写方法不同,不会对整数的实际存储方式产生影响。
2.不同进制可以混合使用,比如 10 + 015 + 0x20 是一个合法的表达式。

在这里插入图片描述
  例如:

int x = 100;
printf("dec = %d\n", x); // 100
printf("octal = %o\n", x); // 144
printf("hex = %x\n", x); // 64
printf("octal = %#o\n", x); // 0144
printf("hex = %#x\n", x); // 0x64
printf("hex = %#X\n", x); // 0X64

四、进制间的转换

计算机数据的存储使用二进制补码形式存储,并且最高位是符号位。(0正1负

1.原码、反码和补码

Ⅰ.正数

正数的补码与反码、原码一样,称为三码合一

Ⅱ.负数

原码:把十进制转为二进制,最高位置为1
反码:原码的符号位不变,其余位取反(0变1,1变0)
补码:反码+1即为补码

个人认为好像原码、反码和补码都是针对二进制而言的。

至于如何计算原码、反码和补码在下面会讲解

2.二进制与十进制的转换

Ⅰ.二进制转十进制:权相加法

从右至左,每一位依次乘以 2 0 2^0 20 2 1 2^1 21 2 2 2^2 22 2 3 2^3 23 ……
例如:二进制1101对应的十进制为 1* 2 0 2^0 20 + 0* 2 1 2^1 21 + 1* 2 2 2^2 22 + 1* 2 3 2^3 23 = 13

Ⅱ.十进制转二进制:除2取余的逆

在这里插入图片描述

Ⅲ、求原码、反码和补码

这里我们以两个字节(即16位)为例,计算正负二十七的原码、反码和补码

+27的原码、反码和补码
在这里插入图片描述


-27的原码、反码和补码
在这里插入图片描述

3.二进制与八进制的转换

Ⅰ.二进制转八进制

将二进制从右至左,每够三位就转换为十进制数字,如果最后不够三位,往前补0,最终就是八进制

在这里插入图片描述

Ⅱ.八进制转二进制

将八进制从右至左,每够三位就转换为二进制,最终得到二进制

在这里插入图片描述

4.二进制与十六进制的转换

Ⅰ.二进制转十六进制

将二进制从右至左,每够四位就转换为十进制数字,如果最后不够四位,往前补0,最终就是十六进制

在这里插入图片描述

Ⅱ.十六进制转二进制

将十六进制从右至左,每够四位就转换为二进制,最终得到二进制

在这里插入图片描述

  • 19
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值