C 二进制, 八进制, 十六进制

二进制

1. 二进制和十进制的转换

1.1 非负二进制 转 十进制

在这里插入图片描述

  • 计算机里只能记录以二进制表示的数字
  • 因为数字需要记录在内存里,而内存是有大量字节构成的,意味着内存的数字必须要记录在字节里,而一个字节被分成8段,每一段只能记录一个0或者1.所以必须要把数字转为成2进制的表示方式才能放在字节里.

1.2 非负十进制 转 二进制

在这里插入图片描述

  • 12这个数字转换成2进制以后,是由8个数位构成的,因为12是偶数,所以对应的2进制最后一位一定是0
  • 12除以2以后,整数部分是6,. 对这8个二进制树也除以2(减少一个数位)并保留整数部分,就相当于丢掉了最右边的数位内容 , 6等于前7个数位, 又因为6是偶数,所以前7个数位最后一位是0
  • 最后得到0000 1100

1.3 负数十进制 转 二进制

在这里插入图片描述

  • B和C只是相同数字的不同进制表达方式, A和D分别是B和C的负数,A和D是不能直接做转换的
  • 只能这样转: A <-> B<->C <-> D
  • 十进制-14转二进制的步骤如下:
    • 14 的二进制是 0000 1110
    • 0000 1110 反码加1 是 1111 0010
    • 1111 0010 就是 十进制-14 在二进制的表示方式
    • 反码加一叫补码, 补码就是负数在计算机中的二进制表示方法

1.4 负二进制 转 成十进制

  • 先判断二进制是负数还是非负数,需要先判断类型(无符号类型是不可能包含负数的)
  • 如果是有符号类型,就看最左边数位的内容,0代表非负数,1代表负数。 把有符号类型的二进制数字中最左边数位叫做符号位
  • 如果1010 0011 是有整数类型(4字节32位)二进制,说明它前面还有24个0没有写,这应该是非负数。整数类型在内存中占4个字节,每个字节占8个二进制数位内容, 所以一个整数类型一共包含了32个二进制数位内容
  • 如果1010 0011 是字符类型(1字节8位),所有的数位都被写出来了,符号位是1, 说明这个数字是一个负数
    • 先反码加一得到二进制的负数,1010 0011 -> 0101 1100 -> 0101 1101
    • 再将正二进制转为十进制,0101 1101 -> 1 + 4 + 8 + 16 + 64 -> 93

八进制

在这里插入图片描述

  • 把二进制所有数位,按照从右向左的顺序,每三个数位为一组。然后把每一组单独转换为十进制就得到八进制的表示方式
printf(%d %o, 0152, 0152); // 106 152
// %d 以10进制的方式显示

十六进制

在这里插入图片描述

  • 把二进制所有数位,按照从右向左的顺序,每四个数位为一组。然后把每一组单独转换为十进制就得到16进制的表示方式
  • 因为是每四个数位为一组,所以结果在0-15之间。 如果结果在0-9之间,那么可用这个转换结果代表这一组内容,但如果转换结果在10到15之间,规定用a-f这6个字母来替换10-15这6个数字。
  • %x 和 %X 做占位符不显示开头的0x
printf(%d %x %X, 0xcd,0xcd,0xcd); //203, cb, CB
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值