有符号右移>>,无符号右移>>>

简介: 有符号右移>>,无符号右移>>>

计算机表示数字正负不是用+ -加减号来表示,而是用最高位数字来表示,0表示正,1表示负


1.有符号右移>>(若正数,高位补0,负数,高位补1)


正数:例如4>>2


首先写出4的二进制数,因为是正数所以最高位为0,也就是第一个


0000 0000 0000 0000 0000 0000 0000 0100


右移两位得到(高位补0)


000000 0000 0000 0000 0000 0000 0000 01


结果为:1,右移n位也就是4/(2^n)


负数:例如-4>>2(高位补1)


首先写出-4的二进制数,因为是负数所以最高位为1


1000 0000 0000 0000 0000 0000 0000 0100


然后写出-4补码:保证符号位不变,其余位置取反加1(从右往左遇到第一个1,然后剩下的全部取反就是了)


1111 1111 1111 1111 1111 1111 1111 1100(补码)


右移2位: 在高位补1


1111 1111 1111 1111 1111 1111 1111 1111


根据补码写出原码才是我们所求的结果, 保留符号位,然后按位取反再加上1


100000 0000 0000 0000 0000 0000 0000 00(取反后的结果)


100000 0000 0000 0000 0000 0000 0000 01(再加1)


结果为:-1



2:无符号右移>>>(不论正负,高位均补0)


正数:例如4>>>2


与4>>2的运算相同,结果也为1


负数:例如-4>>>2



首先写出-4的二进制数,因为是负数所以最高位为1


1000 0000 0000 0000 0000 0000 0000 0100


然后写出-4补码:保证符号位不变,其余位置取反加1(从右往左遇到第一个1,然后剩下的全部取反就是了)


1111 1111 1111 1111 1111 1111 1111 1100(补码)


右移2位: 在高位补0


0011 1111 1111 1111 1111 1111 1111 1111


结果为:1073741823

相关文章
|
1月前
【编程基础知识】正数负数的二进制位运算(左移 右移 无符号右移)
正数和负数需转换成二进制后进行移位运算。左移低位补0,不影响符号位;右移符号位跟随移动,最高位还原为原符号位;无符号右移高位补0,适用于负数处理。
73 0
|
6月前
|
存储
算数移位,逻辑移位以及循环移位
算数移位,逻辑移位以及循环移位
106 0
|
存储 C语言
有符号位与无符号位超超超详解!!!
有符号位与无符号位超超超详解!!!
278 0
|
Java
java中的左移、右移、无符号右移
阅读java源码会经常碰到左移与右移运算。那么左移与右移都是怎么运算呢?查询资料学习了下,这里做个总结。
308 0
java中的左移、右移、无符号右移
大/小端字节序 原码反码补码 有符号整型无符号整形 相关例题
大/小端字节序 原码反码补码 有符号整型无符号整形 相关例题
83 0
|
C语言 编译器
C语言里的左移和右移运算
在用gcc编译这段程序的时候编译器会给出一个warning,说左移位数>=类型长度.那么实际上i,j移动的就是1位,也就是33%32后的余数.在gcc下是这个规则,别的编译器是不是都一样现在还不清楚.
2098 0
Java中二进制计算与&、或|、非~、异或^、左移<<、右移>>、无符号右移>>>
Java中二进制计算与&、或|、非~、异或^、左移<<、右移>>、无符号右移>>>
168 0
|
存储
补码无符号数互换
无符号数补码是本身 有符号数补码是原码按位取反再加1  有符号数与无符号数互转: 有符号数的补码,无符号数的补码 无符号数的补码就是原码本身 有符号数的补码是有符号数据绝对值的原码按位取反再加1 得到的就算有符号数的补码 无符号数据既是无正负之分,所有的位都表示数据,无符号数转换成有符号数,主要看 无符号数的最高有效位,有符号数的最高位为符号位,如果无符号数的最高有效位不为1既为0,则无符号数就是有符号数,如果无符号数的最高有效位为1 ,怎无符号数的补码既原码就是有符号数。
2420 0
mathjax符号
mathjax公式 \(\delta\): \delta \(\Delta\): \Delta \(\int\): \int \(\iint\): \iint \(\approx\): \approx \(\theta\): \theta \(\alpha\): \alp...
1172 0