读书人

关于类型的定义的小疑点请大家指点

发布时间: 2012-03-11 18:15:39 作者: rapoo

关于类型的定义的小问题,请大家指点
看见一个代码是这样赋值的
DWORD = 0x62626262;
这样是4个b,但是DWORD是unsigned long,这样的话就是无符号长整数
如果用16进制转10进制0x62626262 应该等于1650614882那么换句话说如果我直接给这个dword这样赋值是不是也是等于4个b

如果不是谁能给讲讲这其中的原因

因为我的理解长整数应该是个数字
那4个b又不是数字为什么能放到dword里面去

希望高手能浅显易懂的讲解一下


[解决办法]
4字节宽度 表示有4*8=32个bit 也就是32个0和1
4个0和1组成一个16进制
也就是说 4字节宽度 可以存放8位的16进制数0x62626262刚好8位 没问题。
[解决办法]
字符b的ASCII码是0x62
4个b在内存是 62 62 62 62

char sz[4] = {'b', 'b', 'b', 'b'};
DWORD dw = *(DWORD*)sz;
此时dw等于0x62626262


DWORD dw = 0x62626262; // 这个和DWORD dw = 1650614882;等价的
char sz[4];
*(DWORD*)sz = dw;
此时sz就是4个'b'


不要想的太复杂,当成二进制数据看待就行了
这可能只是设计上的技巧,为了提高效率

[解决办法]

探讨

换句话说只要32位宽度能放下的

用10进制表示是数字
用16进制表示是字母什么的(也有可能是汉字之类)
只要用2进制换算不大于32为容量能放下的10进制表示数就都能装进去吗?

[解决办法]
在内存中是一样的东西,但是程序中,它的类型不同而已。0x62626262如果是float,那就是另一种解释了。b是0x62只是ASCII编码。
[解决办法]
>那么换句话说如果我直接给这个dword这样赋值是不是也是等于4个b
是的。

DWORD 实际上就是一块占4个字节的内存,你看到什么东西取决于你想怎么去看这块内存,
比如你要是把它看成一个字符串,那就是bbbb, 你要是把它看成一个整数,那就是1650614882(十六进制表示为0x62626262)。实际上在内存里面都是同样的东西。

读书人网 >C++

热点推荐