位操作

✍ dations ◷ 2025-11-26 22:13:57 #计算机算术,程序架构,布尔代数,二进制算术

位操作是程序设计中对位模式或二进制数的一元和二元操作。在许多古老的微处理器上,位运算比加减运算略快,通常位运算比乘除法运算要快很多。在现代架构中,情况并非如此:位运算的运算速度通常与加法运算相同(仍然快于乘法运算)。

取反是一元运算符,对一个二进制数的每一位执行逻辑反操作。使数字1成为0,0成为1。例如:

NOT 0111(十进制7)  = 1000(十进制8)

许多程序设计语言(包括C程序设计语言family),取反操作符用波浪线"~"表示。值得注意的是此操作符与"逻辑非(!)"操作符不同。在C++中,逻辑非将数字整体看做一个布尔类型--将真值转化为假,将假值转化为真;而C语言将0转化为1,将非零值转化为0。"逻辑非"并不是一个位操作。

按位或处理两个长度相同的二进制数,两个相应的二进位中只要有一个为1,该位的结果值为1。例如

   0101(十进制5)OR 0011(十进制3) = 0111(十进制7)

在C类程序设计语言中,按位或操作符是"|"。这一操作符需要与逻辑或运算符(||)区别开来。

按位或能够将每一位看做旗帜;在二进制数中的每一位可以表示不同的布尔变量。应用按位或操作可以将二进制数的某一位设为1。例如

0010(十进制2)

能够看做包含4个旗帜的组合。第1,2,4旗帜为0;第3个旗帜为1。利用按位或可以将第1个旗帜设置为1,而其他旗帜不变。

   0010(十进制2)OR 1000(十进制8) = 1010(十进制10)

这一技巧通常用来保存程序中的大量布尔变量。

按位异或运算,对等长二进制模式或二进制数的每一位执行逻辑异或操作。操作的结果是如果某位不同则该位为1,否则该位为0。例如

    0101XOR 0011  = 0110

在类C语言中,按位异或运算符是"^"。

汇编语言的程序员们有时使用按位异或运算作为将寄存器的值设为0的捷径。用值的自身对其执行按位异或运算将得到0。并且在许多架构中,与直接加载0值并将它保存到寄存器相比,按位异或运算需要较少的中央处理单元时钟周期。

按位异或也可以用于在比特集合中切换旗帜。给出一个比特模式,

0010

第一和第三位能够通过按位异或运算使用同时切换。

    0010XOR 1010  = 1000

这一技巧可用于操作表示布尔变量的比特模式。

按位与处理两个长度相同的二进制数,两个相应的二进位都为1,该位的结果值才为1,否则为0。例如:

    0101AND 0011  = 0001

在类C语言中,按位与用'&'表示

移位是一个二元运算符,用来将一个二进制数中的每一位全部都向一个方向移动指定位,溢出的部分将被舍弃,而空缺的部分填入一定的值。在类C语言中,左移使用两个小于符号"<<"表示,右移使用两个大于符号">>"表示。

应用逻辑移位时,移位后空缺的部分全部填0。

   0001(十进制1)<<    3(左移3位) = 1000(十进制8)
   1010(十进制10)>>    2(右移2位) = 0010(十进制2)

Java中的移位

JAVA中有一个特有的无符号右移操作符“>>>”。此操作将忽略操作数的符号,同样的还有“>>>=”。

相关

  • Ecstasy摇头丸是一种毒品,其主要成分是MDMA,间中或掺有MDEA、MDA、MBDB或安非他命等其他成分。服用摇头丸者可即兴随音乐剧烈地不停抖动而不觉痛苦。过量摄入摇头丸可能带来数种致命
  • 1981年 哈卡第十届冬季世界大学生运动会于1981年2月25日至3月4日在西班牙的哈卡举行。这是西班牙首次主办冬季世界大学生运动会。
  • 丰田佐吉丰田佐吉(1867年3月19日(庆应3年2月14日)-1930年(昭和5年)10月30日)出生于远江国山口村(现静冈县湖西市),是日本发明家,实业家。他在东京的内国劝业博覧会看到外国的制织机,便独力发明“
  • 保罗·沃尔福威茨保罗·邓迪斯·沃尔福威茨(英语:Paul Dundes Wolfowitz,1943年12月22日-),前世界银行行长,前美国国防部副部长,乃美国国防部军事策划人之一,亦是美国小布什阵营中著名鹰派人物之一。
  • 舞蹈家舞者,是指专职舞蹈演出,以身体动作表达意念及美感的专业人士。在职业规范化的中国大陆属演员分类下的“舞蹈演员”。舞者按不同的舞蹈种类要求,需接受不同的训练,但相同之处是必
  • 流感大流行警告流感大流行警告是世界卫生组织用来评定流感危险等级的警告,共分为六个等级。2009年,警告等级被修订得更加容易理解、更加准确并且都基于能够观察的症状。第一至三级处于准备阶
  • 博尔顿坐标:53°34′41″N 2°25′44″W / 53.578°N 2.429°W / 53.578; -2.429博尔顿(英文:Bolton, /.mw-parser-output .IPA{font-family:"Charis SIL","Doulos SIL","Linux Liber
  • 阿尔瓦罗·佩雷拉阿尔瓦罗·丹尼尔·佩雷拉·巴拉甘(Álvaro Daniel Pereira Barragán,1985年11月28日-)出生于乌拉圭蒙特维多,乌拉圭足球运动员,现效力阿根廷足球甲级联赛球队拉普拉塔大学生。他
  • 杰克·莱蒙杰克·莱蒙(英语:John Uhler Lemmon III,1925年2月8日-2001年6月27日)是一位杰出的美国电影演员,曾经获得两次奥斯卡表演奖(一次配角一次主角),也是三次金球奖影帝,一次柏林影帝以及两
  • 人马小姐不迷茫中文版单行本第一卷封面《人马小姐不迷茫》(セントールの悩み)为村山庆所创作的日本漫画,曾获得第八届龙神奖(日语:龍神賞)第二名(銀龍賞),在德间书店的《月刊COMIC龙(日语:月刊COMICリ