C++移位运算符怎么用啊 移位运算符怎么移的?

C\u8bed\u8a00\u79fb\u4f4d\u8fd0\u7b97\u7b26\u600e\u4e48\u7528\uff1f

\u8fd9\u662fc++\u597d\u5427\u3002\u3002\u3002\u3002\u7b97\u4e86c\u548cc++\u7684\u79fb\u4f4d\u8fd0\u7b97\u7b26\u90fd\u4e00\u6837
\u8fd9\u4e2a\u96be\u9053\u4e0d\u5bf9\u5417\uff0c\u5de6\u79fb\u5c31\u662f*2\u554a\uff08\u4e0d\u8d8a\u754c\u7684\u8bdd\uff09
\u539f\u7406\u5c31\u662f\u4f60\u628a1110\u5316\u6210\u4e8c\u8fdb\u5236\uff08000010001010110\uff09\uff0c\u7136\u540e\u6bcf\u4e2a\u4f4d\u90fd\u5411\u5de6\u79fb\u4e00\u4f4d\uff0c\u6700\u4f4e\u4f4d\u88650\uff0c\u6b21\u9ad8\u4f4d\u820d\u5f03\uff08\u6700\u9ad8\u4f4d\u662f\u7b26\u53f7\u4f4d\uff0c\u4e0d\u80fd\u52a8\uff09

bytemask=intmax<<8;
intmax \u63092\u8fdb\u5236\u5411\u5de6\u79fb\u52a8 2\u8fdb\u5236\u516b\u4f4d\uff0c\u53f3\u8fb9\u88650\uff0c\u5de6\u8fb9\u9ad8\u4f4d\u6ea2\u51fa\u4e22\u5f03

intmax=4294967195\uff1b16\u8fdb\u5236 0xffffff9b
\u5de6\u79fb2\u8fdb\u5236\u516b\u4f4d, \u5c31\u662f\u5de6\u79fb16\u8fdb\u52362\u4f4d\uff0c 16\u8fdb\u5236 0xffff9b00

\u6253\u5370\u51fa\u768410\u8fdb\u5236\u5c31\u4e0d\u592a\u5bb9\u6613\u770b\u3002
\u5de6\u79fb1\u4f4d\u5b9e\u9645\u4e0a\u7b49\u4e8e \u4e582\uff0c\u5de6\u79fb8\u4f4d\u5c31\u662f \u4e58\u4e86 8 \u6b21 2\u3002

\u9ad8\u4f4d\u6ea2\u51fa\u4e22\u5f03\uff0c\u4e22\u5f03\u591a\u5c11\uff0c\u8981\u770b\u4f60\u7684 uint \u662f\u51e0\u4f4d\u7684\u3002

移位无非就是左移<<,右移>>,可以到这里看看:
http://hi.baidu.com/%C4%CC%B2%E8dsk/blog/item/98a4fff86ef7fe06d8f9fdc1.html

一. 位逻辑运算符
1. ~ 按位取反
将1变为0,将0变为1
EG:
~(10011010)
(01100101)
2. & 按位取与
只有两个操作数都是1结果才是1,否则为0
10 = 00000000 00000000 00000000 00001010
12 = 00000000 00000000 00000000 00001100
&
8 = 00000000 00000000 00000000 00001000
3. | 按位取或
两个操作数任意一位为1结果就是1
10 = 00000000 00000000 00000000 00001010
12 = 00000000 00000000 00000000 00001100
|
14 = 00000000 00000000 00000000 00001110
4. ^ 按位异或
两个操作数不同为1,相同为0
10 = 00000000 00000000 00000000 00001010
12 = 00000000 00000000 00000000 00001100
^
14 = 00000000 00000000 00000000 00000110
5. 用法:掩码
掩码是通过&(位与)将某些位设置为开(1),将某些位设置为关(0)。将掩码0看做不透明,将1看着透明。
6. 用法:打开位
打开位是通过 |(位或)打开一个值的特定位,同时保持其他位的不变。这是因为和0位或都为0,和1位或都为1。
7. 用法:关闭位
关闭某些位。
8. 用法:转置位
如果一位为1则转置为0,如果一位为1则转置为0
二. 移位运算符
<< 左移
左移运算符是把操作数的值的每一位向左移动,移动的位数有右边的操作数决定,右侧空出的位数用0填充

>> 右移
右移运算符是把操作数的值的每一位向右移动,移动的位数有右边的操作数决定,左边丢弃的位数用0填充
一、传统的C方式位操作:
1.基本操作:
使用一个unsigned int变量来作为位容器。
2.操作符:
| 按位或操作符:result=exp1|exp2;当exp1和exp2中对应位中至少有一个为1时,result中对应位为1,否则为0。
& 按位与操作符::result=exp1&exp2;当exp1和exp2中对应位全为1时,result中对应位为1,否则为0。
^ 按位异或或操作符:result=exp1^exp2;当exp1和exp2中对应位不相同时,result中对应位为1,否则为0。
~ 反转操作符:将位容器中的所有位都反转,1变为0,0变为1。
<< 按位左移操作符:exp<<n,将容器中所有的位向左移n位,空出的位用0填充。
>> 按位右移操作符:exp>>n,将容器中所有的位向右移n位,空出的位用0填充。
|=,&=,^= 分别对应|&^三种操作符的复合操作符。
3.常用操作
这里我们假设有一个result的unsigned int变量用来储存32个学生的成绩(通过和不通过分别用0和1),这样result就有33位(result从右至左,从0开始计算位数,在这个例子中0位被浪费)。
(a) 将第27位设置为及格(设作1)其他位不变:
result|=(1<<27) //任意的位值与1作按位或操作其值为1,而与0作按位与操作其值不变
(b) 将第27位设置成不及格(设为0)。
result&=~(1<<27) //任意的位值与0作按位与操作其值为0,而与1作按位与操作其值不变
(c) 反转第27位的值。
result^=(1<<27) //任意的位值与1作按位异或操作其值为1,而与0作按位异与操作其值不变

  • C璇█涓>>鍜<<濡備綍浣跨敤?
    绛旓細1銆佸乏绉杩愮畻绗锛<<锛夛細鎸変簩杩涘埗褰㈠紡鎶婃墍鏈夌殑鏁板瓧鍚戝乏绉诲姩瀵瑰簲鐨勪綅鏁帮紝楂樹綅绉诲嚭(鑸嶅純)锛屼綆浣嶇殑绌轰綅琛ラ浂銆傛牸寮忥細闇瑕绉讳綅鐨勬暟瀛 << 绉讳綅鐨勬鏁 渚嬪锛3<<2 3杞崲涓轰簩杩涘埗鏄0011锛屾墍鏈夋暟瀛楀乏绉2涓綅缃紝绌轰綅琛0锛屽緱鍒1100锛屽嵆鍗佽繘鍒舵暟12銆2銆佸彸绉昏繍绠楃锛>>锛夛細鎸変簩杩涘埗鎶婃墍鏈夌殑鏁板瓧鍚戝彸绉诲姩瀵瑰簲...
  • C璇█鐨绉讳綅鎿嶄綔绗︿娇鐢鏂规硶
    绛旓細鍏堣宸︾Щ,宸︾Щ灏辨槸鎶婁竴涓暟鐨勬墍鏈変綅閮藉悜宸︾Щ鍔ㄨ嫢骞蹭綅,鍦C涓敤<<杩愮畻绗.渚嬪:int i = 1;i = i << 2; //鎶奿閲岀殑鍊煎乏绉2浣 涔熷氨鏄,1鐨2杩涘埗鏄000...0001(杩欓噷1鍓嶉潰0鐨勪釜鏁板拰int鐨勪綅鏁版湁鍏,32浣嶆満鍣,gcc閲屾湁31涓0),宸︾Щ2浣嶄箣鍚庡彉鎴 000... 0100,涔熷氨鏄10杩涘埗鐨4,鎵浠ヨ...
  • C璇█涓>>鍜<<濡備綍浣跨敤?
    绛旓細C璇█涓<< 浠h〃宸︾Щ杩愮畻绗︼紝>> 浠h〃鍙崇Щ杩愮畻绗︼紝浣嶇Щ浣嶈繍绠楃鏄皢鏁版嵁鐪嬫垚浜岃繘鍒舵暟锛屽鍏惰繘琛屽悜宸︽垨鍚戝彸绉诲姩鑻ュ共浣嶇殑杩愮畻銆<< 浠h〃宸︾Щ杩愮畻绗︼細宸︾Щ杩愮畻绗︾敤鏉ュ皢涓涓暟鐨勫悇浜岃繘鍒朵綅鍏ㄩ儴宸︾Щ鑻ュ共浣嶏紝绉诲姩鐨勪綅鏁扮敱鍙虫搷浣滄暟鎸囧畾锛屽彸鎿嶄綔鏁板繀椤绘槸闈炶礋鍊硷紝鍏跺彸杈圭┖鍑虹殑浣嶇敤0濉ˉ锛岄珮浣嶅乏绉绘孩鍑哄垯鑸嶅純...
  • 鍦C璇█涓->鈥鎬庝箞鐢?
    绛旓細1銆佸乏绉杩愮畻绗锛<<锛夛細鎸変簩杩涘埗褰㈠紡鎶婃墍鏈夌殑鏁板瓧鍚戝乏绉诲姩瀵瑰簲鐨勪綅鏁帮紝楂樹綅绉诲嚭(鑸嶅純)锛屼綆浣嶇殑绌轰綅琛ラ浂銆傛牸寮忥細闇瑕绉讳綅鐨勬暟瀛 << 绉讳綅鐨勬鏁 渚嬪锛3<<2 3杞崲涓轰簩杩涘埗鏄0011锛屾墍鏈夋暟瀛楀乏绉2涓綅缃紝绌轰綅琛0锛屽緱鍒1100锛屽嵆鍗佽繘鍒舵暟12銆2銆佸彸绉昏繍绠楃锛>>锛夛細鎸変簩杩涘埗鎶婃墍鏈夌殑鏁板瓧鍚戝彸绉诲姩瀵瑰簲...
  • C璇█涓绉讳綅杩愮畻
    绛旓細鍙崇Щ杩愮畻绗︽槸鐢ㄦ潵灏嗕竴涓暟鐨勫悇浜岃繘鍒朵綅鍙崇Щ鑻ュ共浣嶏紝绉诲姩鐨勪綅鏁扮敱鍙虫搷浣滄暟鎸囧畾锛堝彸鎿嶄綔鏁板繀椤绘槸闈炶礋鍊硷級锛岀Щ鍒板彸绔殑浣庝綅琚垗寮冿紝瀵逛簬鏃犵鍙锋暟锛岄珮浣嶈ˉ0銆傚浜庢湁绗﹀彿鏁帮紝灏嗗宸﹁竟绌哄嚭鐨勯儴鍒嗙敤绗﹀彿浣嶅~琛ワ紙鍗斥滅畻鏈Щ浣嶁濓級锛岃屽彟涓浜涙満鍣ㄥ垯瀵瑰乏杈圭┖鍑虹殑閮ㄥ垎鐢0濉ˉ锛堝嵆鈥滈昏緫绉讳綅鈥濓級銆傛敞鎰忥細瀵规棤...
  • 杩愮畻绗鈥渱|鈥濈殑鐢ㄦ硶鏄粈涔?
    绛旓細鈥渱|鈥濆叾瀹冨父鐢ㄨ繍绠楃锛1銆绉讳綅杩愮畻绗 << 宸︾Щ杩愮畻绗︼紱>> 鍙崇Щ杩愮畻绗︺2銆佸叧绯昏繍绠楃 <銆<=銆>銆>=鍏崇郴杩愮畻绗︺3銆佺浉绛夎繍绠楃 鈥 == 鈥濈瓑浜庤繍绠楃锛涒 != 鈥濅笉绛変簬杩愮畻绗︺4銆佷綅涓庤繍绠楃 鈥 & 鈥濇寜浣嶄笌杩愮畻绗 5銆佷綅寮傛垨杩愮畻绗 鈥 鈭 鈥濇寜浣嶅紓鎴栬繍绠楃锛圔itwise exclusive OR ...
  • C璇█闂,鍦ㄤ綅杩愮畻涓,鎿嶄綔鏁版瘡鍙崇Щ涓浣,鍏剁粨鏋滅浉褰撲簬浠涔?鑻ュ乏绉1浣...
    绛旓細渚嬪锛歩nti=0x80000000锛沬=i>>1锛//i鐨勫间笉浼氬彉鎴0x40000000锛岃屼細鍙樻垚0xc0000000 2銆佸乏绉伙紝涔樹互2宸︾Щn浣嶄箻浠2鐨刵娆℃柟锛涘厛璇村乏绉伙紝宸︾Щ灏辨槸鎶婁竴涓暟鐨勬墍鏈変綅閮藉悜宸︾Щ鍔ㄨ嫢骞蹭綅锛屽湪C涓敤<<杩愮畻绗銆備緥濡傦細inti=1锛沬=i<<2锛//鎶奿閲岀殑鍊煎乏绉2浣 宸︾Щ灏辨槸锛氫涪寮冩渶楂樹綅锛0琛ユ渶浣庝綅 ...
  • ...宸︿綅绉杩愮畻绗鍜屽彸浣嶇Щ杩愮畻绗︽槸浠涔堟剰鎬,鎬庝箞杩愮畻,涓句釜渚嬪瓙.._鐧惧害...
    绛旓細灏辨槸鎶婁竴涓暟杞寲鎴愪簩杩涘埗鍐嶇洿鎺ュ浠栬繘琛屾搷浣 渚嬪锛45>>2 //45鍙崇Щ涓や綅 45鐨勪簩杩涘埗涓猴細101101 鍙崇Щ涓や綅灏变负锛 001011 001011鍐嶈浆鍖栦负鍗佽繘鍒朵负锛11 鎵浠45>>2= 11 宸︾Щ杩愮畻绗 45<<2 45鐨勪簩杩涘埗涓猴細101101 宸︾Щ涓や綅灏变负锛10110100 10110100鍐嶈浆鍖栦负鍗佽繘鍒朵负锛180 鎵浠45<<2=180 ...
  • C++绉讳綅杩愮畻绗︽庝箞鐢ㄥ晩
    绛旓細绉讳綅鏃犻潪灏辨槸宸︾Щ<<,鍙崇Щ>>锛屽彲浠ュ埌杩欓噷鐪嬬湅锛歨ttp://hi.baidu.com/%C4%CC%B2%E8dsk/blog/item/98a4fff86ef7fe06d8f9fdc1.html
  • C璇█浣杩愮畻
    绛旓細绉讳綅杩愮畻绗<<鍜>>灏嗗乏渚х殑鎿嶄綔鏁板乏绉绘垨鑰呭彸绉诲彸鎿嶄綔鏁扮粰瀹氱殑鏁扮洰锛屽彸鎿嶄綔鏁板繀椤婚潪璐熴傚洜姝 << 2灏唜鐨勫煎悜宸︾Щ鍔ㄤ袱浣嶏紝鐢0濉厖绌轰綅锛涜繖鐩稿綋浜庝箻4銆傚彸绉讳竴涓棤绗﹀彿鏁颁細鐢0杩涜濉厖銆傚彸绉讳竴涓甫绗﹀彿鏁板湪鏌愪簺鏈哄櫒涓婁細鐢ㄧ鍙蜂綅杩涜濉厖锛堚滅畻鏁扮Щ浣嶁濓級鑰屽湪鍏朵粬鏈哄櫒涓婁細鐢0杩涜濉厖锛堚滈昏緫绉讳綅鈥...
  • 扩展阅读:c++和java哪个好就业 ... c++哪个运算符不能重载 ... c++运算符大全 ... c++教程 ... c c++ c# ... c++输入运算符 ... c++ 运算符重载 规范 ... c++编程 ... c语言和c++和c#先学哪个好 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网