左移和右移
在数字世界中,左移和右移操作对于无符号数和有符号数的处理方式有着显著的区别,它们在计算中的角色与规则各有千秋。
无符号数的右移与除法
无符号整数的右移操作与除法有着惊人的相似性,它们都是将数值的二进制位向右移动,相当于将整数除以2的幂次。这种右移操作可以作为一种高效的方式来替代除法,简化计算过程。
有符号数的右移:算术与逻辑
对于有符号数,右移并非简单的位移,而是分为算术右移和逻辑右移两种类型。算术右移时,最高位被填充的值取决于原始数的符号:正数填充0,负数填充1,这与除法的负数行为一致。而逻辑右移则始终填充0,不会改变数的符号。
左移操作的统一性
无论无符号还是有符号数,左移操作都遵循一致的规则——在最低位填充0,这使得左移操作在数值表示上更具连续性。然而,对于负数,特别是以补码形式表示的-1,如8位补码中的11111111,无论左移多少次,其结果始终是-1,因为补码的特性决定了它的不变性。
位运算符的区分
让我们用异或(^)、逐位与(&)、逐位或(|)、右移(>>)和左移(<<)这五个位运算符来进一步理解这些操作。在有符号数中,左移和右移的差异尤为明显,而无符号数则简单得多,左移始终只填充0,右移则取决于具体类型。
总结:符号与填充的差异
总的来说,有符号数的右移是算术右移,涉及符号位的处理,正数填充0,负数填充1;而左移对无符号数和有符号数都是一致的,最低位始终填充0。理解这些差异对于正确运用这些操作在编程和数字运算中至关重要。
绛旓細1銆佷綔鐢ㄤ笉鍚 绠楁湳宸︾Щ鍜绠楁湳鍙崇Щ涓昏鐢ㄦ潵杩涜鏈夌鍙锋暟鐨勫嶅銆佸噺鍗婏紱閫昏緫宸︾Щ鍜岄昏緫鍙崇Щ涓昏鐢ㄦ潵杩涜鏃犵鍙锋暟鐨勫嶅銆佸噺鍗娿2銆佽〃绀虹殑绉讳綅鍚庢暟鐨勮寖鍥存槸涓嶄竴鏍 鏈夌鍙锋暟宸︾Щ锛堢畻鏈乏绉伙級浣嶅悗鐨勮寖鍥存槸-128鈥斺127銆愭寚8浣嶃戯紝鑰屾棤绗﹀彿鏁帮紙绠楁湳宸︾Щ锛夊乏绉荤殑鑼冨洿鏄0鈥斺255锛屻愭寚8浣嶃戝叾瀹炰笉绠℃槸鍝...
绛旓細鍙崇Щ涓浣嶇浉褰撲簬闄や互2銆備緥锛5>>1 5鐨勪簩杩涘埗琛ㄧず鏄101锛岄偅涔堝彸绉讳竴浣嶄箣鍚庢槸10灏辨槸2浜嗭紝鏄暣闄ょ殑锛宸︾Щ鐨勮瘽灏辨槸鍦ㄥ悗闈㈣ˉ涓涓浂锛岀浉褰撲簬鏄箻浠ヤ簩锛岄偅涔堝彉鎴愪簡1010锛屽崄杩涘埗鏄10銆101鍙崇Щ锛屽氨鏄妸鏈鍚庝竴浣嶆嬁鎺変簡锛屾槸10杩欎釜鏄簩杩涘埗鐨勶紝鍗佽繘鏄2锛5/2鏈潵鏄皬鏁帮紝浣嗚繖閲屾槸鏁存暟鎿嶄綔鐨勶紝鎵浠ユ妸灏忔暟...
绛旓細1銆佸乏绉昏繍绠楃锛<<锛夛細鎸変簩杩涘埗褰㈠紡鎶婃墍鏈夌殑鏁板瓧鍚宸︾Щ鍔瀵瑰簲鐨勪綅鏁帮紝楂樹綅绉诲嚭(鑸嶅純)锛屼綆浣嶇殑绌轰綅琛ラ浂銆傛牸寮忥細闇瑕佺Щ浣嶇殑鏁板瓧 << 绉讳綅鐨勬鏁 渚嬪锛3<<2 3杞崲涓轰簩杩涘埗鏄0011锛屾墍鏈夋暟瀛楀乏绉2涓綅缃紝绌轰綅琛0锛屽緱鍒1100锛屽嵆鍗佽繘鍒舵暟12銆2銆鍙崇Щ杩愮畻绗︼紙>>锛夛細鎸変簩杩涘埗鎶婃墍鏈夌殑鏁板瓧鍚戝彸绉诲姩瀵瑰簲...
绛旓細宸︾Щ鎰忓懗鐫闇姹傚彈鍒颁簡涓瀹氱殑鎵撳嚮銆傛瘮濡傛斂绛栧眰闈㈢殑绋庢敹銆佹薄鏌撶瓑銆傚鑷撮渶姹傝悗闈★紝鎵浠ヤ环鏍煎拰闇姹傞噺閮戒細涓嬮檷銆鍙崇Щ鎰忓懗鐫闇姹傚彈鍒颁簡涓瀹氱殑鍒烘縺銆傛瘮濡傜粡娴庡埡婵璁″垝绛夈傛墍浠ワ紝杩炴帴鐨勫弽搴旀槸浠锋牸鍜岄渶姹傞噺閮芥彁楂樸傞渶姹傛洸绾垮彲浠ヤ互浠讳綍褰㈢姸鍑虹幇锛岀鍚堥渶姹傚畾鐞嗙殑闇姹傛洸绾垮彧鍙互鏄悜鍙充笅鍊炬枩鐨勩傞渶姹傛洸绾块氬父浠ヤ环鏍间负绾佃酱...
绛旓細鍦ㄦ暟瀛椾笘鐣屼腑锛宸︾Щ鍜屽彸绉鎿嶄綔瀵逛簬鏃犵鍙锋暟鍜屾湁绗﹀彿鏁扮殑澶勭悊鏂瑰紡鏈夌潃鏄捐憲鐨勫尯鍒紝瀹冧滑鍦ㄨ绠椾腑鐨勮鑹蹭笌瑙勫垯鍚勬湁鍗冪銆傛棤绗﹀彿鏁扮殑鍙崇Щ涓庨櫎娉曟棤绗﹀彿鏁存暟鐨勫彸绉绘搷浣滀笌闄ゆ硶鏈夌潃鎯婁汉鐨勭浉浼兼э紝瀹冧滑閮芥槸灏嗘暟鍊肩殑浜岃繘鍒朵綅鍚戝彸绉诲姩锛岀浉褰撲簬灏嗘暣鏁伴櫎浠2鐨勫箓娆°傝繖绉嶅彸绉绘搷浣滃彲浠ヤ綔涓轰竴绉嶉珮鏁堢殑鏂瑰紡鏉ユ浛浠i櫎娉曪紝...
绛旓細棣栧厛瑕佺煡閬撳皬鏁扮偣鍚宸︾Щ鍔涓浣嶅彉缂╁皬10鍊嶏紝鍚戝彸绉诲姩涓浣嶄究鎵╁ぇ10鍊 鎵浠ュ氨璇存槑鍘熸潵鐨勯挶鏁颁负鐜板湪鐨10鍊嶏紝閭d箞杩37.8鍏冨氨涓哄師鏉ョ殑-鐜板湪鐨=10鍊嶇殑鐜板湪鐨-鐜板湪鐨=9鍊嶇幇鍦ㄧ殑锛37.8梅9=4.2鍏冧负鐜板湪鐨勶紝閭d箞鍘熸潵鐨勪负4.2脳10=42鍏 ~甯堣寖闄勫皬鏉庝负鎮ㄨВ绛攡~濡傛灉鎮ㄦ弧鎰忚鎸変笅閲囩撼,鎮ㄧ殑閲囩撼鏄垜鍓嶈繘...
绛旓細浠涔堟槸宸﹁皟鏁村彸璋冩暣 涓嬮潰鏄宸︾Щ鍜屽彸绉銆傚厛璇村乏绉,宸︾Щ灏辨槸鎶婁竴涓暟鐨勬墍鏈変綅閮藉悜宸︾Щ鍔ㄨ嫢骞蹭綅,鍦–涓敤<<杩愮畻绗.渚嬪:int i = 1;i = i << 2; //鎶奿閲岀殑鍊煎乏绉2浣 涔熷氨鏄,1鐨2杩涘埗鏄000...0001(杩欓噷1鍓嶉潰0鐨勪釜鏁板拰int鐨勪綅鏁版湁鍏,32浣嶆満鍣,gcc閲屾湁31涓0),宸︾Щ2浣嶄箣鍚庡彉鎴...
绛旓細娴撳害锛氱敱澶у線灏忕Щ 澧炲ぇ鍙嶅簲鐗╂祿搴 骞宠 鍙崇Щ 澧炲ぇ鍙嶅簲鐗╂祿搴 宸﹁竟娴撳害澶 璇存槑鍙宠竟娴撳害灏 涓轰簡杈惧埌骞宠 鍒欏彸绉 鍑忓皬鍙嶅簲鐗╂祿搴 骞宠 宸︾Щ 鍑忓皬鍙嶅簲鐗╂祿搴 璇存槑宸﹁竟娴撳害灏 鍒欏彸杈规祿搴﹀ぇ 涓轰簡杈惧埌骞宠 宸︾Щ 澧炲ぇ鐢熸垚鐗╂祿搴 骞宠 宸︾Щ 锛堜互姝ょ被鎺級鍑忓皬鐢熸垚鐗╂祿搴 骞宠 鍙崇Щ 锛堜互姝ょ被鎺級璇寸櫧浜嗭紝娴撳害澶х殑...
绛旓細鍖栧骞宠 鍚宸︾Щ鍔灏辨槸鍚戦嗗弽搴旀柟鍚戠Щ鍔紱鍚戝彸绉诲姩灏辨槸鍚戞鍙嶅簲鏂瑰悜绉诲姩銆
绛旓細1銆佸綋鍑芥暟鍥捐薄鍚戝乏銆佸彸骞崇Щ鏃讹紝绾靛潗鏍囦繚鎸佷笉鍙橈紝妯潗鏍囬伒寰乏鍔犲彸鍑忕殑瑙勫垯锛涘綋鍑芥暟鍥捐薄鍚戜笂銆佷笅骞崇Щ鏃讹紝妯潗鏍囦繚鎸佷笉鍙橈紝绾靛潗鏍囬伒寰笂鍑忎笅鍔犵殑瑙勫垯銆2銆佸嚱鏁板浘璞″钩绉讳笉澶栦箮涓ょ鎯呭喌锛屽嵆宸︺佸彸骞绉诲拰涓娿佷笅骞崇Щ銆傚嚱鏁板浘璞$殑宸︺佸彸骞崇Щ鏄拡瀵规í鍧愭爣x鑰岃█锛屽嚱鏁板浘璞$殑涓娿佷笅骞崇Щ鏄拡瀵圭旱鍧愭爣y鑰岃█銆傚嚱...