有符号位的移位后,高位是否会补1 Java中,位运算符>>,右移时左边何时补0,何时补1

java\u79fb\u4f4d\u8fd0\u7b97\u95ee\u9898\uff1a\u201c-1>>1\u201d\u548c\u201c-1>>>1\u201d\u6709\u4f55\u5dee\u522b?

>>\u8fd9\u4e2a\u662f\u5e26\u7b26\u53f7\u53f3\u79fb\u3002\u3002\u3002\u3002
>>> \u8fd9\u4e2a\u662f\u65e0\u7b26\u53f7\u53f3\u79fb\u3002\u3002\u3002\u3002

-1\u7684\u4e8c\u8fdb\u5236\u53cd\u7801\u8868\u793a\u4e3a 11111111 11111111 11111111 11111111

-1>>1\u7684\u7ed3\u679c\u662f \uff1a 1111111 1111111 11111111 1111111
-1>>>1\u7684\u7ed3\u679c\u662f\uff1a 01111111 11111111 1111111 11111111

\u65e0\u7b26\u53f7\u53f3\u79fb\u540e\u524d\u9762\u88650\uff0c\u800c\u5e26\u7b26\u53f7\u53f3\u79fb\u662f\u8865\u7b26\u53f7\u4f4d\uff0c\u4e5f\u5c31 \u662f\u7b2c\u4e00\u4f4d\uff0c\u8d1f\u6570\u88651\uff0c\u6b63\u6570\u88650

\u5e0c\u671b\u5bf9\u4f60\u6709\u5e2e\u52a9\u3002\u3002\u3002\u3002\u4ecd\u6709\u95ee\u9898\u53ef\u4ee5HI\u6211\u3002\u3002\u3002

\u5728Thinking in Java\u7b2c\u4e09\u7ae0\u4e2d\u7684\u4e00\u6bb5\u8bdd:

\u79fb\u4f4d\u8fd0\u7b97\u7b26\u9762\u5411\u7684\u8fd0\u7b97\u5bf9\u8c61\u4e5f\u662f\u4e8c\u8fdb\u5236\u7684\u201c\u4f4d\u201d\u3002\u53ef\u5355\u72ec\u7528\u5b83\u4eec\u5904\u7406\u6574\u6570\u7c7b\u578b\uff08\u4e3b\u7c7b\u578b\u7684\u4e00\u79cd\uff09\u3002\u5de6\u79fb\u4f4d\u8fd0\u7b97\u7b26\uff08>\uff09\u5219\u5c06\u8fd0\u7b97\u7b26\u5de6\u8fb9\u7684\u8fd0\u7b97\u5bf9\u8c61\u5411\u53f3\u79fb\u52a8\u8fd0\u7b97\u7b26\u53f3\u4fa7\u6307\u5b9a\u7684\u4f4d\u6570\u3002\u201c\u6709\u7b26\u53f7\u201d\u53f3\u79fb\u4f4d\u8fd0\u7b97\u7b26\u4f7f\u7528\u4e86\u201c\u7b26\u53f7\u6269\u5c55\u201d\uff1a\u82e5\u503c\u4e3a\u6b63\uff0c\u5219\u5728\u9ad8\u4f4d\u63d2\u51650\uff1b\u82e5\u503c\u4e3a\u8d1f\uff0c\u5219\u5728\u9ad8\u4f4d\u63d2\u51651\u3002Java\u4e5f\u6dfb\u52a0\u4e86\u4e00\u79cd\u201c\u65e0\u7b26\u53f7\u201d\u53f3\u79fb\u4f4d\u8fd0\u7b97\u7b26\uff08>>>\uff09\uff0c\u5b83\u4f7f\u7528\u4e86\u201c\u96f6\u6269\u5c55\u201d\uff1a\u65e0\u8bba\u6b63\u8d1f\uff0c\u90fd\u5728\u9ad8\u4f4d\u63d2\u51650\u3002\u8fd9\u4e00\u8fd0\u7b97\u7b26\u662fC\u6216C++\u6ca1\u6709\u7684\u3002
\u82e5\u5bf9char\uff0cbyte\u6216\u8005short\u8fdb\u884c\u79fb\u4f4d\u5904\u7406\uff0c\u90a3\u4e48\u5728\u79fb\u4f4d\u8fdb\u884c\u4e4b\u524d\uff0c\u5b83\u4eec\u4f1a\u81ea\u52a8\u8f6c\u6362\u6210\u4e00\u4e2aint\u3002\u53ea\u6709\u53f3\u4fa7\u76845\u4e2a\u4f4e\u4f4d\u624d\u4f1a\u7528\u5230\u3002\u8fd9\u6837\u53ef\u9632\u6b62\u6211\u4eec\u5728\u4e00\u4e2aint\u6570\u91cc\u79fb\u52a8\u4e0d\u5207\u5b9e\u9645\u7684\u4f4d\u6570\u3002\u82e5\u5bf9\u4e00\u4e2along\u503c\u8fdb\u884c\u5904\u7406\uff0c\u6700\u540e\u5f97\u5230\u7684\u7ed3\u679c\u4e5f\u662flong\u3002\u6b64\u65f6\u53ea\u4f1a\u7528\u5230\u53f3\u4fa7\u76846\u4e2a\u4f4e\u4f4d\uff0c\u9632\u6b62\u79fb\u52a8\u8d85\u8fc7long\u503c\u91cc\u73b0\u6210\u7684\u4f4d\u6570\u3002\u4f46\u5728\u8fdb\u884c\u201c\u65e0\u7b26\u53f7\u201d\u53f3\u79fb\u4f4d\u65f6\uff0c\u4e5f\u53ef\u80fd\u9047\u5230\u4e00\u4e2a\u95ee\u9898\u3002\u82e5\u5bf9byte\u6216short\u503c\u8fdb\u884c\u53f3\u79fb\u4f4d\u8fd0\u7b97\uff0c\u5f97\u5230\u7684\u53ef\u80fd\u4e0d\u662f\u6b63\u786e\u7684\u7ed3\u679c\uff08Java 1.0\u548cJava 1.1\u7279\u522b\u7a81\u51fa\uff09\u3002\u5b83\u4eec\u4f1a\u81ea\u52a8\u8f6c\u6362\u6210int\u7c7b\u578b\uff0c\u5e76\u8fdb\u884c\u53f3\u79fb\u4f4d\u3002\u4f46\u201c\u96f6\u6269\u5c55\u201d\u4e0d\u4f1a\u53d1\u751f\uff0c\u6240\u4ee5\u5728\u90a3\u4e9b\u60c5\u51b5\u4e0b\u4f1a\u5f97\u5230-1\u7684\u7ed3\u679c\u3002

1.二进制
二进制有着原码,反码,补码之分,在计算机中都是用补码进行运算,这样符合计算机的特性。
a, 首先说说正数,正数的原码,反码,补码都一样 ,只要写出原码,一切都OK,运算当然是用反码啦,在这也就是原码。
b, 其次是负数,负数相对复杂一些,反码是符号位不变,其他位全取反,补码是在反码基础上加1,找负数补码还有一种快捷方法,符号位不变,从右往左看,第一个1之前的数全部取反。

2.四个位运算(补码运算,有负数一定要变成补码,结果为负数也要变成原码)
a, 按位与 & 只有当参与运算的两个数都为1,结果才为1,例如 1&1=1,1&0=0,0&0=0。
b, 按位或 | 其中一个为1,结果为1.
c, 按位异或 ^ 一个数为0,另一个数为1,结果为1.
d, 按位取反 ~ 包括符号位在内的全部数d都取反。

3.三个移位运算(补码运算,有负数一定要变成补码,结果为负数也要变成原码)
a, 算术右移,>>,低位溢出,符号位不变,并用符号位数补溢出的高位。
b, 算术左移,<<,符号位不变,低位补零。
c, 逻辑右移,>>>,低位溢出,高位补零。

  • 鏈夌鍙蜂綅鐨勭Щ浣嶅悗,楂樹綅鏄惁浼氳ˉ1
    绛旓細a, 棣栧厛璇磋姝f暟锛屾鏁扮殑鍘熺爜锛屽弽鐮侊紝琛ョ爜閮戒竴鏍 锛屽彧瑕佸啓鍑哄師鐮侊紝涓鍒囬兘OK锛岃繍绠楀綋鐒舵槸鐢ㄥ弽鐮佸暒锛屽湪杩欎篃灏辨槸鍘熺爜銆俠, 鍏舵鏄礋鏁帮紝璐熸暟鐩稿澶嶆潅涓浜涳紝鍙嶇爜鏄鍙蜂綅涓嶅彉锛屽叾浠栦綅鍏ㄥ彇鍙嶏紝琛ョ爜鏄湪鍙嶇爜鍩虹涓婂姞1锛屾壘璐熸暟琛ョ爜杩樻湁涓绉嶅揩鎹锋柟娉锛岀鍙蜂綅涓嶅彉锛屼粠鍙冲線宸︾湅锛岀涓涓1涔嬪墠鐨勬暟鍏ㄩ儴鍙栧弽銆
  • 鍏充簬璁$畻鏈虹粍鎴愬師鐞嗗弻绗﹀彿绉讳綅闂,姹傝В绛斻
    绛旓細鍙岀鍙蜂綅琛ョ爜鍙崇Щ鏃讹紝浣庝綅绗﹀彿浣嶄篃闅忕潃鍙崇Щ锛岄珮浣嶇鍙蜂綅涓嶅彉锛岄珮浣嶈ˉ1銆
  • C璇█涓鏈夌鍙鏁鐨勭Щ浣鎯呭喌
    绛旓細鍙崇Щ锛氬皢鏈楂樹綅琛涓绗﹀彿浣
  • 浣嶈繍绠:璐熸暟鍙崇Щ涓庢棤绗﹀彿鍙崇Щ杩愮畻灏忕粨
    绛旓細瀵逛簬甯︾鍙峰彸绉,鑻ヤ负璐熸暟,鍒欏湪瀛樺偍鏃堕浣嶈〃绀虹鍙蜂綅,鍏跺间负1,琛ㄧず璇ュ兼槸璐熸暟鐨勭Щ浣,鍦ㄧЩ浣嶈繃绋嬩腑,楂樹綅琛1,鑻ョ鍙蜂綅鏄0,琛ㄧず鏄鏁,鍦ㄧЩ浣嶈繃绋嬩腑楂樹綅琛ラ浂,涓よ呯殑鍓嶆彁鏄鍙蜂綅淇濇寔涓嶅彉:        瀵逛簬璐熸暟鐨勫彸绉伙細鍥犱负璐熸暟鍦ㄥ唴瀛樹腑鏄互琛ョ爜褰㈠紡瀛...
  • 濡備綍鐞嗚В绉讳綅杩愮畻绗?
    绛旓細2銆佸彸绉昏繍绠楃锛>>锛夛細鎸変簩杩涘埗鎶婃墍鏈夌殑鏁板瓧鍚戝彸绉诲姩瀵瑰簲浣嶇Щ浣嶆暟锛屼綆浣嶇Щ鍑(鑸嶅純)锛楂樹綅鐨勭┖浣嶈ˉ绗﹀彿浣嶏紙姝f暟琛ラ浂锛岃礋鏁拌ˉ1锛銆傛牸寮忥細闇瑕佺Щ浣嶇殑鏁板瓧 >> 绉讳綅鐨勬鏁 渚嬪锛11 >> 2 11鐨勪簩杩涘埗涓1011锛屾墍鏈夋暟鍚戝彸绉2涓綅缃紝鍥犱负11鏄鏁帮紝鎵浠ラ珮浣嶈ˉ0锛屽緱0010锛屾槸鍗佽繘鍒剁殑2銆
  • Java绉讳綅杩愮畻绗﹂棶棰
    绛旓細鏈夌鍙峰彸绉讳細淇濈暀鏈楂樹綅鐨勭鍙蜂綅锛浠庢楂樹綅寮濮嬮愪綅鍙崇Щ濉0锛涜屾棤绗﹀彿鍙崇Щ浼氬皢绗﹀彿浣嶄竴璧峰彸绉伙紝骞跺皢楂樹綅鍏ㄩ儴濉0銆備緥锛氬浜庝竴涓猙yte绫诲瀷鐨勬暟10010100鏉ヨ锛屾湁绗﹀彿鍙崇Щ2浣嶅彉涓10000101锛岃屾棤绗﹀彿鍙崇Щ2浣嶅彉涓00100101銆傚墠鑰呬粛鐒舵槸涓涓礋鏁帮紝鑰屽悗鑰呭彉鎴愪簡姝f暟銆傚乏绉诲彧鏈夋湁绗﹀彿鐨勶紝娌℃湁鏃犵鍙峰乏绉汇
  • 鏄笉鏄鏃犵鍙锋暟鐨勭Щ浣閮芥槸閫昏緫绉讳綅,鏈夌鍙鏁扮殑绉讳綅閮芥槸绠楁湳绉讳綅?
    绛旓細鏃犺鏄乏绉昏繕鏄彸绉伙紝绌虹己閮ㄥ垎閮芥槸鐩存帴琛0銆傜Щ鍑虹殑浣嶆暟瑕佷箞鍒颁簡鏇楂樹綅锛瑕佷箞鐩存帴涓㈠純銆傚彇鍐充簬浣犵殑鏁版嵁绫诲瀷銆傚乏绉讳笌閫昏緫绉讳綅瀹屽叏鐩稿悓锛屽彸绉荤殑鏃跺欏乏杈圭殑绌虹己浣嶈ˉ0杩樻槸琛1锛屾牴鎹绗﹀彿浣鏉ワ紝濡傛灉鏄鏁帮紝鍒欒ˉ0锛屽鏋滄槸璐熸暟锛屽垯琛1銆傚彧瑕佺Щ鍑虹殑鏁版嵁涓嶈鑸嶅純锛屾棤璁烘槸閫昏緫绉讳綅杩樻槸绠楁湳绉讳綅閮界被绛変簬涔橀櫎娉曪紝...
  • C51鐨勫崟鐗囨満涓彸绉绘寚浠>>涓轰粈涔堟湁鏃跺欐渶楂樹綅浼氳ˉ1
    绛旓細绠楁湳鍙崇Щ鏈楂樹綅鏄绗﹀彿浣嶏紝鍙崇Щ鍚庣鍙蜂綅淇濇寔涓嶅彉锛堝鏋滀竴鐩村彸绉讳細瀵艰嚧鎵鏈変綅閮藉彉鎴愬拰鏈楂樹綅涓鏍风殑鍊硷級銆傞昏緫鍙崇Щ鎵嶆槸鏈楂樹綅琛0銆俵ed鍥犱负鏄痗har锛岀紪璇戝櫒浼氭妸">>"瑙i噴鎴愮畻鏈彸绉伙紝鍗虫渶楂樹綅鏄鍙蜂綅锛0x80鏈楂樹綅姝eソ鏄1锛夛紝淇濇寔涓嶅彉銆傛渶鍚庡鑷寸粨鏋滀笉瀵广俵ed瑕佸畾涔変负unsigned char灏卞簲璇ヤ篃瀵逛簡銆
  • C璇█鐨勭Щ浣鎿嶄綔绗︿娇鐢ㄦ柟娉
    绛旓細灏辨槸璇,绗﹀彿浣鍚戝彸绉诲姩鍚,姝f暟鐨勮瘽琛0,璐熸暟琛1,涔熷氨鏄眹缂栬瑷涓殑绠楁湳鍙崇Щ.鍚屾牱褰撶Щ鍔ㄧ殑浣嶆暟瓒呰繃绫诲瀷鐨勯暱搴︽椂,浼氬彇浣欐暟,鐒跺悗绉诲姩浣欐暟涓綅.璐熸暟10100110 >>5(鍋囪瀛楅暱涓8浣)锛屽垯寰楀埌鐨勬槸 11111101 鎬讳箣,鍦–涓,宸︾Щ鏄昏緫/绠楁湳宸︾Щ(涓よ呭畬鍏ㄧ浉鍚),鍙崇Щ鏄畻鏈彸绉,浼氫繚鎸佺鍙蜂綅涓嶅彉 .瀹為檯搴旂敤涓...
  • 鐢绘槦鏄熷湴鏂逛负浠涔堟槸ff涓嶅簲璇ユ槸00鍚
    绛旓細宸︾Щ锛氬浜庢鏁版潵璇达紝绉讳綅涔嬪悗锛岄珮浣嶈ˉ0銆傚浜庤礋鏁版潵璇达紝绉讳綅涔嬪悗锛岄珮浣嶈ˉ1銆傚嵆鐢辩鍙锋暟锛绉讳綅涔嬪悗锛岄珮浣嶈ˉ绗﹀彿浣銆傝屾ゼ涓荤殑浠g爜閲岄潰a鏄竴涓猻hort绫诲瀷锛鏈夌鍙鏁帮紝鍚屾椂鏈楂樹綅绗﹀彿浣嶄负1锛屾槸璐熸暟锛屾墍浠ラ珮浣嶈ˉ1鑰屼笉鏄0銆傚鏋滄兂璁╃粨鏋滄槸00鐨勮瘽锛屽垯闇瑕佸皢a瀹氫箟鎴恥nsigned short绫诲瀷鍗冲彲銆
  • 扩展阅读:算术移位符号位会动吗 ... 有符号数移位 ... 源码三符号位算术移位 ... 双符号位的算术移位 ... 双符号位参与移位吗 ... 算术移位怎么移 ... 如何用符号位判断溢出 ... 算术移位符号位会一起移吗 ... 移位时符号位需要移动吗 ...

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