C语言 左移位的问题,求大神,帮忙解释一下!!!

int aa=0x12;
pitntf("%d\n",aa<<3);
应该等于96的为什么是90,要是移4位,应该192,但输出是120!!!
帮忙解释一下。。。。谢谢

aa=0001`0010(2).
aa<<3=000`1001`0000=90(10)(就是在后面填3个0,结果和输出一样)
aa<<4=0001`0010`0000=120(10)(也和输出一样)
楼上好像都不对
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2018-03-31
aa==0x12(0x表示十六进制,十六进制12,十进制是16+2==18),二进制0001 0010

左移3位,二进制1001 0000,十六进制0x90,十进制144。
左移4位,二进制0001 0010 0000,十六进制0x120,十进制288。
你确定是printf("%d\n",aa<<3);吗?可能是这个吧:printf("%x",aa<<3);,%x表示十六进制输出。本回答被网友采纳
第2个回答  2013-07-08
你说的也不对
aa为18
aa<<3,相当于乘8,显示144.
aa<<4,相当于乘16,显示288
我用C++BUILDER6 试过了。

c语言位运算左位移问题。
不对吧,左移应该是整体向左边移动,如y=x<<2,就是x的左边去掉2位,后边补2个0,结果应该是:01001100

c语言左移问题
但左移概念是左边去掉n个二进制位,右边补n个零,但这是指原来的二进制数是“机器数”。就是如果使用unsigned char 来存储这个数的话,就是这样的。例如:0001 0010(十进制为18)左移4位,得到的应该是0010 0000(十进制32),但是18*16≡32 (模256)当左移左边不去零,右边单纯补零的时候...

c语言右移和左移是怎样转换的?
右移一位相当于除以2。例:5>>1 5的二进制表示是101,那么右移一位之后是10就是2了,是整除的;左移的话就是在后面补一个零,相当于是乘以二,那么变成了1010,十进制是10。101右移,就是把最后一位拿掉了,是10这个是二进制的,十进是2,5\/2本来是小数,但这里是整数操作的,所以把小数...

关于C语言左移?
int类型二进制是32位的数,也就是4组八位的二进制数,你只写了1组,左边还有3组00000000呢,远未达到最高的符号位,所以按照每移N位相当于原数乘以2的N次方,你移动了2位也就是原数乘以4,35*4=140,运算没错。

c语言1左移32位(1<<32)是多少,左移-1位呢?求大神解释!!!
C语言中 << 是逻辑移位,不是循环移位。1 左移 32 位后为 0,左移 -1 位实际是左移 255 位(互补),当然也是0。这种问题可以写一段小程序,单步执行,看一下每一步的结果。

C语言按位左移运算规则
C语言中按位左移的运算符为<<,其规则如下:对于操作a<<n,1 按照二进制值每位向高位(书写上是向左)移动n位;2 最高位(最左边的)n位舍去;3 最低位(最右边)填加n个0.简单起见,用char型举例如下:例一 0x12 << 3 => B00010010 << 3 => B10010 000(这里最高位的三个0被舍去,...

C语言左移
0<<5左移5位,即000000 0<<6左移6位,即0000000 左移后是用二进制表示的,具体的这个程序中有什么用,应该看程序本身,就像#define PI_FRMERR (0 << 5)用000000代替PI_FRMERR可能与某个数进行与操作或其他的。

C语言中怎样表示移位啊?例如将某个值左移两位
利用位操作:"<<"就是左移 ">>"就是右移 举个例子:将a左移2位,然后赋给a a<<=2 也即是a=a<<2 在C语言中左移1位,相当于乘2,右移相当于除2。

关于c语言的位移问题
1.unsigned char的数据左移八位,那么低八位会变成0 2.c=(a<<8)+b;因为左边c是unsigned int类型,c语言会进行强制类型转换,把(a<<8)和b当作unsigned int数据类型,这样,如果a=1,那么c将等于c=(1<<8)+b=256+b 这个问题的关键点在于C语言在计算的时候会进行强制类型转换,=右边的...

c语言中的左调整和右调整是什么意思?
什么是左调整右调整 下面是左移和右移。先说左移,左移就是把一个数的所有位都向左移动若干位,在C中用<<运算符.例如:int i = 1;i = i << 2; \/\/把i里的值左移2位 也就是说,1的2进制是000...0001(这里1前面0的个数和int的位数有关,32位机器,gcc里有31个0),左移2位之后变成...

相似回答