C语言中进制转换与函数

 

进制转换:

为什么使用二进制、八进制、十六进制?

由于现在的CPU只能识别高低两种电平,只能使用二进制数据进行计算

二进制虽然能够被计算机直接计算,但是不方便书写、记录,因此将数据以八进制方式为了更方便记录在文件中

随着CPU位数不断增加,八进制不能满足需求,所以发展出了十六进制来表示数据,

由于历史原因八进制还不能退出历史舞台

十进制转二进制:(十进制转其他进制)

求余法: 用2对数据求余,然后再继续对商求余,知道商为0结束,过程中产生的余数就是该数据的二进制(逆序)

n %2 余数

商%2

...

127 %2 1

63 %2 1

31 %2 1

15 %2 1

7 %2 1

3 %2 1

1 %2 1

0 0

二进制:01111111

求权法: 数据- 2^(n-1) 如果可以减,则第n位为1,否则为0

137

128 64 32 16 8 4 2 1

1 0 0 0 1 0 0 1

手算: 79 28 63 119

10 A 11 B

二进制转十进制:(其他进制转十进制)

二进制数据每位 乘2^(n-1) 结果求和

10011101 128+16+8+4+1 157

二进制转八进制:

三个二进制位转为一位八进制位

二进制 10 011 001 101 110

八进制 2 3 1 5 6

二进制转十六进制:

四个二进制位转为一位十六进制位

二进制 10 0110 0110 1110

十六进制: 2 6 6 E

在C代码中,以0开头的数据是八进制数据,以0x开头的是十六进制数据

%o 以八进制形式显示数据

%x 以十六进制显示数据

%#o %#x 以对应的进制显示数据

原码、反码、补码:

原码: 数据的二进制

反码:

正数的原码就是它的反码

负数的反码是它的原码符号位不变,其它位按位求反

补码: 数据在内存中是以补码形式存储的

正数的原码就是它的补码

负数的补码是它的反码+1

负数的补码:

1、数据转换为二进制

2、二进制符号位不变,其余按位求反得到反码

3、反码+1得到补码

-127

1111 1111

1000 0000

1000 0001 补码

0000000000000000000000001000 0001 %d --127->129

补码转数据:

无符号的补码直接转成十进制数据

有符号看最高位是0,说明是正数,也直接转成十进制数据

有符号且最高位是1,说明是负数

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值