如何手动计算像~0x000C这样的表达式?

时间:2017-05-05 16:10:28

标签: c bit-manipulation bit

我是电气工程专业的学生。在我们的编程课上,我们获得了大量的C语言练习,并要求解释发生了什么以及IDE如何执行位操作。

因此,例如,如果我提供unsigned short x = 0x000C并执行~x,则输出为65523。您的IDE如何执行此操作?

1 个答案:

答案 0 :(得分:6)

为了提供一些上下文,一般来说,我们使用以下前缀来表示数字的不同基本表示:

  • 没有前缀意味着基数10,a.k.a。小数(我们在日常生活中使用的)
  • 0x表示base-16,也就是十六进制(从0-9A-F开始计数,因此单个数字可以表示0到15之间的任何值...这需要4位,因为数字15有一个小数代表0b1111
  • 0b表示base-2,a.k.a。二进制(从0到1 ......需要每位数1位)
  • 0表示base-8,a.k.a。八进制(从0到7 ......需要每位3位)

所以,考虑到你可能已经知道但另一个用户可能不知道,这就是幕后以非常高级的方式发生的事情。假设您的环境中unsigned short为16位宽,并且给出了......

unsigned short x = 0x000C = 0b0000 0000 0000 1100

... ~是一个按位求反运算符,这意味着你只需要翻转所有位。所以,例如:

~0b0000 0000 0000 1100 = 0b1111 1111 1111 0011 = 0xFFF3 = 65523

作为一个注释,当你开始尝试用语言(如Python和VBScript)将它们像整数抽象为“无限大数”时,这样的事情会变得棘手。翻转16位无符号短路的位与翻转“无限大数”的位有很大不同,而且更有可能。