>>>1和>>1 的区别
发布网友
发布时间:2022-04-19 22:50
我来回答
共5个回答
热心网友
时间:2023-07-06 00:36
以java为例:
int x1=8
int x2=-8
int y1=7
int y2=-7
int的宽度为32位,最高位为符号位,机内负数以补码表示,上面的4变量x1,x2,y1,y2的机内码分别是(二进制形式)。
x1>>>1得0000 0000 0000 0000 0000 0000 0000 0100 十进制为4。
x2>>1得1111 1111 1111 1111 1111 1111 1111 1100 十进制为-4。
十进制数
十进制数转换为二进制数时,由于整数和小数的转换方法不同,所以先将十进制数的整数部分和小数部分分别转换后,再加以合并。十进制整数转换为二进制整数 十进制整数转换为二进制整数采用"除2取余,逆序排列"法。
具体做法是:用2去除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为零时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。
热心网友
时间:2023-07-06 00:37
左移运算 左移运算符“<<”是双目运算符。其功能把“<< ”左边的运算数的各二进位全部左移若干位,由“<<”右边的数指定移动的位数,
高位丢弃,低位补0。例如: a<<4 指把a的各二进位向左移动4位。如a=00000011(十进制3),左移4位后为00110000(十进制48)。6. 右移运算 右移运算符“>>”是双目运算符。其功能是把“>> ”左边的运算数的各二进位全部右移若干位,“>>”右边的数指定移动的位数。
例如:设 a=15,a>>2 表示把000001111右移为00000011(十进制3)。 应该说明的是,对于有符号数,在右移时,符号位将随同移动。当为正数时, 最高位补0,而为负数时,符号位为1,最高位是补0或是补1 取决于编译系统的规定。Turbo C和很多系统规定为补1。
main(){
unsigned a,b;
printf("input a number: ");
scanf("%d",&a);
b=a>>5;
b=b&15;
printf("a=%d\tb=%d\n",a,b);
}
请再看一例!
main(){
char a='a',b='b';
int p,c,d;
p=a;
p=(p<<8)|b;
d=p&0xff;
c=(p&0xff00)>>8;
printf("a=%d\nb=%d\nc=%d\nd=%d\n",a,b,c,d);
}
热心网友
时间:2023-07-06 00:37
以java为例:
int x1=8;
int x2=-8;
int y1=7;
int y2=-7;
注意:int的宽度为32位,最高位为符号位,机内负数以补码表示,上面的4变量x1,x2,y1,y2的机内码分别是(二进制形式)
x1:0000 0000 0000 0000 0000 0000 0000 1000
x2:1111 1111 1111 1111 1111 1111 1111 1000
y1:0000 0000 0000 0000 0000 0000 0000 0111
y2:1111 1111 1111 1111 1111 1111 1111 1001
x1>>>1得:
0000 0000 0000 0000 0000 0000 0000 0100 十进制为4
x2>>1得:
1111 1111 1111 1111 1111 1111 1111 1100 十进制为-4
y1>>1得:
0000 0000 0000 0000 0000 0000 0000 0011 十进制为3
y2>>>1得:
0111 1111 1111 1111 1111 1111 1111 1100 十进制为2147483644
热心网友
时间:2023-07-06 00:38
带符号的右移,一般正数会在最高位上赋0,负数赋1.
热心网友
时间:2023-07-06 00:39
左移运算 左移运算符“<<”是双目运算符。其功能把“<< ”左边的运算数的各二进位全部左移若干位,由“<<”右边的数指定移动的位数