C语言基础语法回顾

10进制转2进制

使用短除法

原码、补码与反码

计算机是用补码来存储数据的,为什么要用引入反码和补码呢?

  • 原码:数字在计算机中的表现形式是二进制,叫做机器数,二进制是带有符号位的,比如:数字 3和-3,二进制表示方法分别为 00000011 和10000011 ,最高位,即最左边的位置是符号位,0表示正,1表示负。
  • 反码:正数的反码与原码相同,负数的反码是在其原码的基础上,符号位不变,其余位数取反。即1变成0,0变成1.
  • 补码:证书的补码与源码相同,负数的补码是在反码的基础上加1.
十进制数 原码 反码 补码
3 00000011 00000011 00000011
-3 10000011 11111100 11111101
9 00001001 00001001 00001001
-9 10001001 11110110 11110111

简单来说引入反码是为了让计算机的基础电路设计变得简单,因为加上一个负数相当于减去一个正数,这样可以让计算机只需要做加法即可。但是这样明显有个弊端,对于数字0来说,会有2个编码表示0:00000000和10000000 ,而0带符号是没有意义的。因此引入了补码,正数的补码是原码本身, 负数的补码是反码+1。 相当于 十进制数 -0,原码:10000000,反码:11111111,补码:溢出,相当于-128 。因此,-128实际上是通过-0的补码来表示的,因此-128没有原码和反码。这样就解决了0的多重表示问题。而且也能多表示一个数字 -128,也就是为什么8位二进制数的表示范围是[-128]到[127]

按位运算符

  • & 按位与:参与运算的两数,各对应的二进位相与,即都为1则为1,否则为0。
如9&5:
00001001
00000101
00000001  计算结果,最终为1
  • | 按位或:参与运算的两数,各对应的二进位相或,只要有一个为1,则为1.
如4|2
00000100
00000010
00000110 计算结果,最终为6
  • ^ 按位异或:参与运算的两数,各对应的二进位相或,即每个相对应的数字不同则为1.
如4^2
00000100
00000010
00000110 计算结果,最终也为6

移位运算

二进制数整体向左或者右移动,缺的部分补0.向左移动相当于乘法,向右移相当于除法。如十进制数字5<<2。二进制表示法为00000101 向左移动2位是 00010100,相当于5乘以2*2.


猜你喜欢

转载自www.cnblogs.com/falcon-fei/p/11060188.html