C语言进制转换

C++学习之路【1】:标C数据结构和算法

二进制

一个字节可以分成八段,每段可以记录一个0或者1
为了把一个数字记录到一个字节里就必须首先把他转换成八个0或者1
在这里插入图片描述
用一组0或者1表示数字的方法叫做二进制
任何一个数字既可以用十进制方式表示也可以用二进制方式表示
计算机里只能记录以二进制方式表示的数字

二进制表示方式中每个数位(bit)有一个编号,最后边数位的编号是0,向左依次递减
在这里插入图片描述
逢二进一:00001111 + 1 = 00010000

有符号类型的数字(不加unsigned修饰)才有符号
二进制”最左边“的位叫做符号位
符号位为0表示非负数,符号位为1表示负数
01011010(前提是char类型)- 正数
11011010(前提是char类型)-负数
10101010(前提是unsigned char类型)-正数
10101010(short类型)-正数

十进制的非负转二进制
例如:前提是unsigned char(1字节,8位)的91转二进制:
91/2=45 余1 - 0
45/2=22 余1 - 1
22/2=11 余0 - 2
11/2=5 余1 - 3
5/2=2 余1 - 4
2/2=1 余0 - 5
1/2=0 余1 - 6
先得到的数位为低位,后得到的数位为高位
91对应的二进制就是001011011(不够8位,高位补0,凑够1字节)
负数,符号位(最高位)为1转换:
二转十:取反加一,转十添负(取反:1变0,0变1)
char类型
10100011取反01011100加一01011101转十93添负-93
10010011取反01101100加一01101101转十109添负-109
十转二:去负转二,取反加一
-93去负93转二01011101取反10100010加一10100011
-109去负109转二01101101取反10010010加一10010011
short类型
-93去负93转二00000000 01011101取反11111111 10100010加一11111111 10100011
HEX:16进制 DEC:10进制 OCT:8进制 BIN:2进制
BYTE:1字节8位 WORD:2字节16位
DWORD:4字节32位 QWORD:8字节64位

八进制

八进制概念:将二进制数从右边到左边每3位分为一组,每组用0~7的数字替换得到8进制形式
字面值前缀:0,例如:0520
printf/scanf格式化占位符:%[#]o
11101001 —> 11 101 001 —> 351 —> 0351

printf("%o\n, 0520");	//520
printf("%#o\n, 0520");	//0520

八进制一般用来表示文件权限

十进制二进制八进制
9301 011 1010135
10901 101 1010155
-9310 100 0110243
-10910 010 0110223
-1911 111 111 101 000 0010177501

十六进制

十六进制概念:把二进制从右边到左边每4位分一组,每组用一个字母替换,用a~ f替换10~ 15,0~ 9不用替换
字面值前缀:0x/0X,例如:0xb520或者0XB520
printf/scanf格式化占位符:%[#]x/X
例如:1100 0011 —> 12 3 —> c 3 —> 0xc3

printf("%x\n", 0x520);	//520
printf("%#x\n", 0x520);	//0x520
十进制二进制十六进制
000000
100011
200102
300113
401004
501015
601106
701117
810004
910019
101010a/A
111011b/B
121100c/C
131101d/D
141110e/E
151111f/F
十进制二进制十六进制
930101 11010x5d
1090110 11010x6d
-931010 00110xa3
-1091001 00110x93
-1911111 1111 0100 00010xff41
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值