|
![]() | 作者: Fantasy [pda]
![]() |
登录 |
我看书上说移出的位就会消失那么: X=7 用二进制表示为00000111 X<<1用二进制表示为00001110 X<<5用二进制表示为11000000 那X<<9不就都变成0000000了吗? |
地主 发表时间: 07/12 19:19 |
![]() | 回复: xiean [xiean] ![]() |
登录 |
是 |
B1层 发表时间: 07/12 21:27 |
![]() | 回复: Fantasy [pda] ![]() |
登录 |
那都变成00000000怎么可能还显示出数来呢? 就是显示出来也只能是0呀!~~~ |
B2层 发表时间: 07/13 14:10 |
![]() | 回复: 286 [unique] ![]() |
登录 |
移位会消失。但具体语言实现是不一样的。 比如C语言int在PC机上用4个字节表示。所以最低位如果左移需要移32次才会溢出。 因为会溢出,所以一般在确保不会溢出时才作运算,左移类似于乘2运算,右移类似于除2运算。可以利用移位作位判断运算。 比如,读字库点阵时可用移位运算。 #include <stdio.h> main() { int a=1; for (int i=0;i<32;i++) { a<<=1; printf("%d\n",a); } } |
B3层 发表时间: 07/13 14:33 |
![]() | 回复: Fantasy [pda] ![]() |
登录 |
你的程序我不明白也不能运行! 那7<<32次才会溢出那<<9用二进制怎么表示呀? |
B4层 发表时间: 07/13 15:06 |
![]() | 回复: xiean [xiean] ![]() |
登录 |
286 的意思就是当你 int x = 7; 时,在PC上内存实际是 00000000 00000000 00000000 00000111 来表示,并非 00000111,用16进制就是 00 07H |
B5层 发表时间: 07/13 16:04 |
![]() | 回复: Fantasy [pda] ![]() |
登录 |
哦~~~明白~了~ 谢谢回贴的人:P 不过我现在想问一个和本标题无关的问题~~~ 邪安版主你写的 00000000 00000000 00000000 00000111表示为16进制就是00 07H 是不是每8位转成16进制的一个数呀?所以才写成00 07H! [此贴被 Fantasy(pda) 在 07月13日20时15分 编辑过] |
B6层 发表时间: 07/13 19:46 |
![]() | 回复: xiean [xiean] ![]() |
登录 |
上面16进制只写了两个字节,准确说是 00 00 00 07H 的,我写简单了点,每四位2进制对应一个16进制,比如 0001 0010 0011 0100 0101 0110 0111 1110 1111就是16进制的 1 2 3 4 5 6 7 E F 而三位2进制对应8进制,如 001 010 011 100 101 110 111 1 2 3 4 5 6 7 这样说你明白没?int 四字节实际上就是8个16进制,如 040CAB9EH,在内存中存放为 9E AB 0C 04 上面写得简单,希望不会让你误解,本来我准备写成 0x07 的说。。。呵呵 |
B7层 发表时间: 07/13 23:03 |
![]() | 回复: Fantasy [pda] ![]() |
登录 |
哦~~明白了~~(如果你写成0x07那我就更晕了) 不过286说左移32次才会溢出,可是我左移20次就会显示出0如果左移32次显示7左移15次是-32768这是为什么呢? 是不是一个整型的数右移1次就是整除2一次呀? |
B8层 发表时间: 07/14 15:57 |
![]() | 回复: 286 [unique] ![]() |
登录 |
首先你要知道什么是移位,而且还要知道移位有很多种,具体可参见汇编语言中移位操作指令. 我说左移32位才溢出是指C语言的int类型在PC机上的表示,换成别的语言,别的类型,别的机器上就变了.比如C语言char类型8次就溢出了. 所谓移位就是所有位同时移,所以与数据没关系.什么数都可以移. 左移时,最左边的数(最高位)将出现溢出,而不是全部数据溢出. 当左移到一定程度时,最高位变为1,此时如果定义这个数为有符号数,将变成负数. 当右移到一定程度,最低位不断消失,最后肯定会只变成0. |
B9层 发表时间: 07/14 17:38 |
![]() | 回复: Fantasy [pda] ![]() |
登录 |
我用的是C语言也是整型(int)当然我用的也是PC计算机! |
B10层 发表时间: 07/14 19:11 |
![]() | 回复: shesh [shesh] ![]() |
登录 |
讨论这个没什么意义,一般8位才会移,32位移的话就跟CPU有关了. PC机中是高字节在前的,所以你移位INT型的时候就不一样了. |
B11层 发表时间: 07/15 16:52 |
![]() | 回复: pinkuang [pinkuang] ![]() |
登录 |
你们真是厉害啊 我现在学C,不知道为什么,好象学不回 如果一个数学和英语一点都不好的学生 有可能学回编程么? 哥哥告诉我好么? |
B12层 发表时间: 07/15 20:07 |
![]() | 回复: Fantasy [pda] ![]() |
登录 |
C语言里整型好像是占2个字节吧? float和long才是4个字节吧! |
B13层 发表时间: 07/21 13:29 |
![]() | 回复: 286 [unique] ![]() |
登录 |
不是说了吗. 不同机器不同C编译版本不同操作系统结果不一样. 有些4字节有些2字节. |
B14层 发表时间: 07/22 11:41 |
![]() | 回复: Fantasy [pda] ![]() |
登录 |
我说的就是普通的PC计算机! 难到不同的PC计算机都不同吗? |
B15层 发表时间: 07/22 19:41 |
![]() | 回复: 286 [unique] ![]() |
登录 |
KAO,我都想急了. 你就不会试一下吗? 我一再说 1.不同机器 2.不同C编译版本 3.不同操作系统 结果不一样 #include <stdio.h> main() { printf("%d",sizeof(int)); } 在TC中显示结果为2,在VC中显示结果为4. |
B16层 发表时间: 07/23 09:35 |
![]() | 回复: yuntian108 [yuntian108] ![]() |
登录 |
应该先分是逻辑位移还是算术位移 |
B17层 发表时间: 07/25 19:31 |
|
20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon
粤ICP备05087286号