C++ 我不懂这个方法:z=z>&燃气轮机;1.

C++ 我不懂这个方法:z=z>&燃气轮机;1.,c++,int,unsigned,C++,Int,Unsigned,这是我的密码: int main(){ unsigned int z = 18; z = z>>1; std::cout << z << std::endl; } intmain(){ 无符号整数z=18; z=z>>1; std::cout>mean?我以为它只用于cin>是右位移位(a),它将一个值中的所有位向右移位一个给定值。对于无符号整数,>1实际上是一个整数除以二 二进制中的值18为: 0001 0010 | | | +-

这是我的密码:

int main(){
 unsigned int z = 18;
 z = z>>1;
 std::cout << z << std::endl;
}
intmain(){
无符号整数z=18;
z=z>>1;

std::cout>mean?我以为它只用于cin
>
是右位移位(a),它将一个值中的所有位向右移位一个给定值。对于无符号整数,
>1
实际上是一个整数除以二

二进制中的值18为:

0001 0010
   |   |
   |   +---  2
   +------- 16
            --
            18
将其右移一位(位从右侧“落下”,位从左侧进入)可提供:

0000 1001
     |  |
     |  +--  1
     +-----  8
            --
             9


<>(a)在这种特殊情况下,C++还允许使用<代码> >代码>作为类的操作符,例如用<代码> STD::CIN > MyInPvValue> <代码>,它试图从标准输入中读取值,并将其放入<代码> MyInPtVaV/Cuff>变量中.

< P> <代码> > /Cord>是正确的位偏移(a)将一个值中的所有位右移一个给定值。对于无符号整数,
>1
实际上是整数除以2

二进制中的值18为:

0001 0010
   |   |
   |   +---  2
   +------- 16
            --
            18
将其右移一位(位从右侧“落下”,位从左侧进入)可提供:

0000 1001
     |  |
     |  +--  1
     +-----  8
            --
             9


<>(a)是在这种特殊情况下。C++还允许使用<代码> >代码>作为类的操作符,例如用<代码> STD::CIN > MyInPvValue> <代码>,它试图从标准输入中读取值,并将其放入<代码> MyInPtVaV/Cuff>变量。< /P> < P>它是向左移动1咬的Z。 例如,你的z是18,也就是说(如果int是2个字节)0000 0000 0001 0010 bynary,当你移动它时,z变成0000 0000 1001 which是9。它实际上是以2为底的。如果你有负的错误,例如-18,在第二个补码中它是

0000 0000 0001 0010
1111 1111 1110 1101//first complement
1111 1111 1110 1110//second complement
当你移动它时,符号字节被放在顶部

1111 1111 1111 0111
0000 0000 0000 1000//first complement
0000 0000 0000 1001//second complement
女巫是-9


这种向右移动很容易,搜索web以查找向左移动,如果是有符号的值,则更为复杂。

对于z的1位,向左移动。 例如,你的z是18,也就是说(如果int是2个字节)0000 0000 0001 0010 bynary,当你移动它时,z变成0000 0000 1001 which是9。它实际上是以2为底的。如果你有负的错误,例如-18,在第二个补码中它是

0000 0000 0001 0010
1111 1111 1110 1101//first complement
1111 1111 1110 1110//second complement
当你移动它时,符号字节被放在顶部

1111 1111 1111 0111
0000 0000 0000 1000//first complement
0000 0000 0000 1001//second complement
女巫是-9


这种向右移动很容易,搜索web搜索向左移动,如果是有符号的值,情况就更复杂了提示:这是一个运算符,应该使研究更容易。可能重复的Hmm,我有时对人们很少考虑他们的密切原因感到失望。Dupe我可能理解,但“离题”出于给出的原因?这个问题没有要求代码,我看不出提问者如何能够在没有实际答案的情况下对问题表现出更多的理解。有时,从“接受的任何技能水平”转移到“接受的任何技能水平”模型,虽然这无疑会清除一些垃圾,但也可能会把婴儿连同洗澡水一起扔掉。不过,我只是一个人:-)接线员>>和接线员提示:这是一个接线员,应该很容易研究。可能是重复的,嗯,我有时对人们很少考虑他们的亲密原因感到失望。我可以重复可能理解,但由于给出的原因“偏离主题”?问题没有要求代码,我看不出提问者如何能够在没有实际答案的情况下对问题表现出更多的理解。有时似乎从“接受的任何技能水平”转移开了模型,虽然这无疑会清除一些垃圾,但它也可能会把婴儿连同洗澡水一起扔掉。尽管如此,我只是一个人:-)运算符>>和运算符仅在>>1的情况下,对于一般情况>>n,它实际上是整数除以2^n…哦,好吧,如果我有z=z>>2,那么我将无符号int除以4@Quirliom@user2843560:是的,但是使用
z=z/4
:-)位移位最好留给实际的位操作-如果你想除法,你应该除法。@paxdiablo,使用
z/=4;
imo更是如此。谢谢你的帮助,我现在明白了!@paxdiabloOnly在>>1的情况下,对于一般的c它实际上是整数除以2^n…哦,好吧,如果我有z=z>>2,我会把我的无符号整数除以4@Quirliom@user2843560:是的,但使用
z=z/4
:-)会更具可读性。位移位最好留给实际的位操作-如果要除法,应该除法。@paxdiablo和e使用
z/=4;
imo更是如此。谢谢你的帮助,我现在明白了!@paxdiablelft转移负值可能是未定义的行为,是的,但右移并不那么容易。右移负值有实现定义的值。左移负值可能是未定义的行为,是的,但右移IFT并不是那么容易。右移负值有一个实现定义的值。