c语言进制的转换

1.基本概念

c语言有十进制,二进制,八进制,十六进制

先大致了解一下这几个进制。
十进制:就是0 1 2 3 4 5 6 7 8 9 ,满十进一
二进制:只有0 1,满二进一
八进制:0 1 2 3 4 5 6 7,满八进一
十六进制0 1 2 3 4 5 6 7 8 9 a b c d e f,和二进制转换

下面看一下这几个进制的互相转换

十进制     二进制 		八进制		十六进制
0			0000		0			0
1 			1000		1			1
2			1000		2			2
3			1100		3			3
4			1000		4			4
5			1010		5			5
6			1100		6			6
7			1110		7			7
8			1000		10			8
9			1001		11			9
10			1010		12			a
11			1011		13			b
12			1100		14			c
13			1101		15			d
14			1110		16			e
15			1111		17			f

2.进制转化的计算

  1. 二进制转十进制
    因为十进制是逢十进一,所以正常计算就行
    举一个例子说明
    比如二进制1 1 0 1
比如二进制`1   1   0   1`
对应权重	2^3	 2^2  2^1  2^0
计算十进制1x2^3+1x2^2+0x2^1+1x2^0=13
  1. 二进制转化八进制
    二进制满二进一,八进制满八进一
    所以二进制中的3位对应八进制的1位
    例如:
比如二进制`1    0   1   1    1   0   1`
这里拆除三份
1		1x2^0=1	  
0 1 1	0x2^2+1x2^1+1x2^0=3
1 0 1 	1x2^2+0x2^1+1x2^0=5
转化为八进制为:135
  1. 二进制转化十六进制
    这里的话转换十六进制也是一样
    二进制的每4位的对应十六进制的1位
比如二进制`1   1   0   1   0   1   0   1`
这里拆除二份
1   1   0   1	1x2^3+1x2^2+0x2^1+1x2^1=d
0   1   0   1	0x2^3+1x2^2+0x2^1+1x2^1=5
转化为十六进制为:d5
  1. 十进制转二进制
    这里用一张图直接说明一下:在这里插入图片描述
    按照这个方法除便可以了。

3.原码 反码 补码

  1. 这里如果是正数的的话都是相同的
    例如:
    int a=8
    这里我们先了解常见变量类型对应bit
变量类型		字节			bit
int			4				32
char		1				8
short		2				16
double		8				64
float		4				32
long		4				32
long long	8				64

因为一个二进制对应一个bit位
这里我们创建一个变量:
int a=4
int类型有32个bit,转换为二进制为

原码	00000000 00000000 00000000  00000100
反码	00000000 00000000 00000000  00000100
补码	00000000 00000000 00000000 	00000100
  1. 但如果是负数,那么就存在区别了,这里二进制的最高位代表正负,1代表负,0代表正
    这里创建一个负数
    int a=-6
    转化为二进制
原码	10000000 00000000 00000000  00000110
反码	11111111 11111111 11111111  11111001
//反码除开符号位,其他按位取反
补码	11111111 11111111 11111111 	11111010
//补码+1

这里是原码转化为补码的步骤,补码转化为原码也是相同的。

补码	11111111 11111111 11111111 	11111010
		10000000 00000000 00000000  00000101
//除开符号位,其他按位取反
原码	10000000 00000000 00000000  00000110
//+1

4.位移操作符<<和>>

<<	 左移操作符  	
>> 	 右移操作符

左移操作符
移位规则:左边抛弃、右边补0

#include <stdio.h>
int main()
{
 int num = 10;
 int n = num<<1;
 printf("n= %d\n", n);
 printf("num= %d\n", num);
 return 0;
}

在这里插入图片描述
而右移操作符则会保留符号
左边⽤原该值的符号位填充,右边丢弃

#include <stdio.h>
int main()
{
 int num = -1;
 int n = num>>1;
 printf("n= %d\n", n);
 printf("num= %d\n", num);
 return 0;
}

最后的结果是:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值