你说的是结构体或类吧?
与数据对齐有关,给你个例了吧(copy from csdn):
内存对齐问题(关键字,内存对齐)
typedef struct
{
int a[10];
char ch[10];
int f[10];
bool b[10];
}MType;
int _tmain(int argc, _TCHAR* argv[])
{
int i;
MType mt;
printf("%d",sizeof(MType));
getch();
return 0;
}
这个结构中,本来按我们计算sizeof(MType)是100,然而结果是104。在vc和
linux下的dev c++都是。
原因是内存对齐问题。一般编译器认为内存以4的倍数对齐。仔细分析内存可以得出
结论,不够4,要向后移动,凑成4的倍数。这个机构的一个对象就涉及了向后移动2
字节,补全2字节。故为104。
可以在文件最前面加#pragma pack(1) 这是将编译器该成为1的倍数对齐,这样求出的
长度就为100了。
INT DINT WORD DWORD 区别,还有16为整数和32位整数的区别,最后举实例说明!谢谢
INT-16位
DINT-32位
WORD-双字节
DWORD-四字节更多
16位和32位怎么理解?谢谢
16位INT-用16个bit(即2个字节)表示的单整形数
32位DINT-用32个bit(即4个字节)表示的双整形数
以上两种类型均包含符号位,即有效数值位分别为15和31
而WORD和DWORD不包含符号。
非常谢谢!
不好意思,人有点笨,麻烦你举个实例说明下什么是单整形数和双整行数
单整形:0111 1111 1111 1111 = 7F FF = +32767
1111 1111 1111 1111 = FF FF = -32767
WORD:0111 1111 1111 1111 = 7F FF = 32767
1111 1111 1111 1111 = FF FF = 65535
BYTE,WORD,DWORD的最大值是多少
BYTE 是一个位,最大值是 FF,也就是十进制的 255(2 的 8 次方减 1)
WORD 是一个字,一个字是两个位,最大值是 FF FF,也就是十进制的 65535 (2 的 16 次方减 1)
DWORD 是字,相当于四个位,最大值是 FF FF FF FF,十进制等于 4294967295 (2 的 32 次方减 1)。
这三种数据类型都是无符号,所以取最大值时每个位均填充 FF 即可。
DWORD是双字,笔误特此更正
BYTE是字节,8 个位,再更正……笔误略多
怎样将2个WORD合并成1个DWORD??
用联合体:
WORD 是 unsigned short, DWORD 是 unsigned long
合分方法如下例:
#include<stdio.h>
union U{
unsigned short v[2];
unsigned long u;
};
main()
{
union U x;
x.u = 0x0022abcd;
printf("%04x %04x\n",x.v[0],x.v[1]);
x.v[0]=0x1357;
x.v[1]=0x9bdf;
printf("%08x",x.u);
}
---
大端,小端都可用此法。
一个dword加一个word不是6字节吗
应该这样分析!dword中有一个w,一个o,一个r,两个d;word中有一个w,一个o,一个r,一个d。dword中的一个w,o和r是三个字节存在三个存储单元中,这个应该没有争议吧!两个d如果只存在一个存储单元中,只要分两次读取数据就可以了,所以两个d算一个字节。至於word是四个字节应该看得出来的吧!不知道我的分析你能不能看得懂!说是8个字节应该与存储单元有关的吧,不然一个英文字母就是一个字节,几个英文字母就有几个字节。
求说明PLC编程的各种数据类型是什么意思,怎么区别,有资料说明不?
一、基本数据类型
1、位(bit)
常称为BOOL(布尔型),只有两个值:0或1。如:I0.0,Q0.1,M0.0,V0.1等。
2、字节(Byte)
一个字节(Byte)等于8位(Bit),其中0位为最低位,7位为最高位。如:IB0(包括I0.0~I0.7位),QB0(包括Q0.0~Q0.7位),MB0,VB0等。范围:00~FF(十进制的0~255)。
3、字(Word)
相邻的两字节(Byte)组成一个字(Word),来表示一个无符号数,因此此,为16位。如:IW0由IB0和IB1组成的,其中I是区域标识符,W表示字,0是字的起始字节需要注意的是,字的起始字节(如上例中的“0”)都必须是偶数。字的范围为十六进制的0000~
FFFF(即十进制的0~65536)。在编程时要注意,如果已经用了IW0,如再用IB0或IB1
要特别加以小心。
4、双字(Double Word)
相邻的两个字(Word)组成一个双字,来表示一个无符号数。因此,双字为32位。如:
MD100是由MW100和MW102组成的,其中M是区域标识符,D表示双字,100是双字的起始字节。需要注意的是,双字的起始字节(如上例中的“100”)和字一样,必须是偶数。双字的范围为十六进制的0000~FFFFFFFF(即十进制的0~4294967295)。在编程时要注意,如果已经用了MD100,如再用MW100或MW102要特别加以小心。
以上的字节、字和双字数据类型均为无符号数,即只有正数,没有负数。
5、16位整数(INT,Integer)
整数为有符号数,最高位为符号位,1表示负数,0表示正数。范围为-32768~32767。
6、32位整数(DINT,Double Integer)
32位整数和16位整数一样,为有符号数,最高位为符号位,1表示负数,0表示正数。范围为-
2147483648~2147483647。
7、浮点数(R,Real)
浮点数为32位,可以用来表示小数。浮点数可以为:1.m×2e
二、复合数据类型
用户通过复合基本数据类型而生成就是复合数据类型。
复合数据类型包括以下几种:
1、数组(ARRAY)
将一组同一类型的数据组合在一起组成一个单位就是数组。
2、结构(STRUCT)
将一组同不同类型的数据组合在一起组成一个单位就是结构。
3、字符串(STRING)
字符串是由最多254个字符组成的一维数组。
4、日期和时间(DATE-AND-TIME)
用于存储年、月、日、时、分、秒、毫秒和星期的数据。占用8个字节,BCD编码。星期天代码为1,星期一~星期六代码分别是2~7。
如:DT#2004_07_15_12:30:15.200为2004年7月15日12时30分15.2秒。
5、用户定义的数据类型(UDT,User-Defined Data Types)
由用户将基本数据类型和复合数据类型组合在一起形成的数据类型。
可以在数据块DB和变量声明表中定义复合数据类型。
这个东西啊, 你随便找个品牌的PLC编程手册下载了看看,都有介绍
c语言中有没有dword、word、byte数据类型啊,纠结
dword是int
word是short
byte是char更多
但是又好像说byte是unsigned char。但是为什么有int、short、char。还要用手摸dword、word、char
你说的对,byte是unsigned char 更准确。
我理解dword这些是从字节长度的角度,更准确一些
比如64位下,一个int不一定是4字节的。
为什么不直接用int,short,char而要用什么难理解的dword,word,byte
其实假如一开始用的就是dword、word可能就觉得int什么的比较难理解了,主要就是考虑的角度不一样吧,很多的库还自己定义了UINT,int8,int16,之类的类型,其实都是对原生的数据类型的包装,这个不必太较真。
哦。got it
DWORD是什么?
1个二进制位称为1个bit,8个二进制位称为1个Byte,也就是1个字节(8位),2个字节就是1个Word(1个字,16位),则DWORD(DOUBLE WORD)就是双字的意思,两个字(32位)
转载请注明出处51数据库 » lword与dword dword和word