我是电气工程专业的学生。在我们的编程课上,我们获得了大量的C语言练习,并要求解释发生了什么以及IDE如何执行位操作。
因此,例如,如果我提供unsigned short x = 0x000C
并执行~x
,则输出为65523
。您的IDE如何执行此操作?
答案 0 :(得分:6)
为了提供一些上下文,一般来说,我们使用以下前缀来表示数字的不同基本表示:
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位无符号短路的位与翻转“无限大数”的位有很大不同,而且更有可能。