一、C语言中DWORD
DWORD 定义在
多数编译器 情况下 等于 unsigned int
但并不绝对,某些编译器 可能 是 unsigned long long
DWORD 应当是无符号数, 不是负数。
------------------------------------
unsigned int a= 0xfffffff4; // 无符号数
printf("%d %x %u",a,a,a);
MS VC++ 6.0 输出 为: -12 fffffff4 4294967284
所以: 无符号数 0xfffffff4 看成有符号整型数 输出 就是 -12
反过来说,DWORD -12 是 0xfffffff4
二、C语言中,如何使输出结果的DOS窗口最大化
不知道你用VC++建立文件是不是对的,你这样: 文件--->新建---->文件选项卡--->C++文件-->OK 输入代码编译运行 选择“关闭”终止应用程序。
关闭&忽略按钮。 你不会用的是TC吧,生成的是十六位的应用程序,你换一个32位的编译器就OK了,比如DEV_C++或VC++ 6.0或VS2008都行 不会吧,我这边运行的时候成功了啊,不过中间是要卡一下,因为要执行system命令之前就已经生成小的窗口了,只有调用了这两个语句之后才会最大化 老子日哦,遇到DEBUG命令就报毒,疯了,这杀毒软件太敢尽杀绝了 手动按ALT+ENTER #include #include int main() { system("echo exit|%ComSpec% /k prompt e 100 B4 00 B0 12 CD 10 B0 03 CD 10 CD 20 $_g$_q$_|debug>nul"); system("chcp 437>nul"); system("graftabl 936>nul"); printf("从一个美丽的地方\n"); return 0; } dixnuits写的只是有点小问题,就是把void改成int,再在最后加一个return 0;就OK了 写得不错,没有一点BUG,分你就给他吧,毕竟他的答案更符合你的要求 #include #include typedef BOOL (WINAPI *PROCGETCONSOLEDISPLAYMODE)(LPDWORD); typedef BOOL (WINAPI *PROCSETCONSOLEDISPLAYMODE)(HANDLE,DWORD,LPDWORD); PROCGETCONSOLEDISPLAYMODE GetConsoleDisplayMode; PROCSETCONSOLEDISPLAYMODE SetConsoleDisplayMode; int main() { DWORD dwNewMode=1; DWORD dwOldMode=0; HMODULE hKernel32 = GetModuleHandle("kernel32"); if (!hKernel32) return 0; GetConsoleDisplayMode = (PROCGETCONSOLEDISPLAYMODE) GetProcAddress(hKernel32,"GetConsoleDisplayMode"); if (!GetConsoleDisplayMode) return 0; SetConsoleDisplayMode = (PROCSETCONSOLEDISPLAYMODE) GetProcAddress(hKernel32,"SetConsoleDisplayMode"); if (!SetConsoleDisplayMode) return 0; HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleDisplayMode(hOut,dwNewMode,&dwOldMode); GetConsoleDisplayMode(&dwOldMode); printf("你好啊\n"); return 0; }。
三、c语言怎么控制输出窗口大小
在Windows操作系统下用C语言控制输出窗口大小首先需要调用GetStdHandle函数获得窗口句柄,然后再调用相关函数修改窗口大小,如下所示:
#include <stdio.h>
#include <windows.h>
#include <conio.h>
HANDLE hOut; /*标准输出句柄*/
COORD size = {44, 7}; /*窗口大小*/
SMALL_RECT rc = {0, 0, 44-1, 7-1}; //要设置的窗口显示的大小和位置
CONSOLE_CURSOR_INFO cursor = {1, FALSE}; /*光标信息,用于隐藏光标*/
hOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleWindowInfo(hOut, TRUE, &rc);
SetConsoleScreenBufferSize(hOut, size);
SetConsoleCursorInfo(hOut, &cursor);
CloseHandle(hOut);
函数GetStdHandle可以获取当前标准输入以及输出设备的句柄。函数原型为:
HANDLE GetStdHandle(DWORD nStdHandle);
/*
其中,nStdHandle可以是
STD_INPUT_HANDLE 标准输入设备句柄
STD_OUTPUT_HANDLE 标准输出设备句柄
STD_ERROR_HANDLE 标准错误设备句柄
*/
需要说明的是,“句柄”是Windows最常用的一个概念。它通常用来标识Windows资源(如菜单、图标、窗口等)和设备等对象。虽然可以把句柄理解为是一个指针变量类型,但它不是对象所在的地址指针,而是作为Windows系统内部表的索引值来使用的。调用结束后,需要通过调用CloseHandle函数来关闭输入输出句柄。
四、C语言中为何整型变量以实型变量输出为0
1、整形数和浮点数在内存中的存储格式和布局不同(理解浮点数的内存布局和表示方式,请参考:http://blog.csdn.net/songjinshi/article/details/7753777)2、printf在进行参数入栈时是根据实参的类型进行入栈,而不是根据格式化字符中指定的类型,具体入栈过程如以下所示。
所以造成入栈实参的类型和实际函数使用的类型不匹配(关键是所占内存的大小不同),所以在具体的解析中就会出现如题所说的结果,因为整形的内存布局在被解析为浮点数时会非常小,因为整形本来是4个字节存储,而被解析为8个字节的浮点数,所以所得的值会非常小,正如浮点数的的表示:非规格化:当E的二进制位全部为0时,N为非规格化形式。 注意,此时小数点左侧的隐含位为0。
为什么e会等于(1-bias)而不是(-bias),这主要是为规格化数值、非规格化数值之间的平滑过渡设计的。后文我们还会继续讨论。
有了非规格化形式,我们就可以表示0了。把符号位S值1,其余所有位均置0后,我们得到了 -0.0; 同理,把所有位均置0,则得到 +0.0。
非规格化数还有其他用途,比如表示非常接近0的小数,而且这些小数均匀地接近0,称为“逐渐下溢(gradually underflow)”属性。下面贴出两段反汇编代码,解析参数如何入栈: printf("%f",45);00405028 mov esi,esp 0040502A push 2Dh 0040502C push offset _ORDER_SERVER_ADDRESS-0ACh (43F2ACh) 00405031 call dword ptr [__imp__printf (43C124h)] 00405037 add esp,8 printf("%f",d);(d为整形变量)00405028 mov esi,esp 0040502A mov ecx,dword ptr [d] 0040502D push ecx 0040502E push offset _ORDER_SERVER_ADDRESS-0ACh (43F2ACh) 00405033 call dword ptr [__imp__printf (43C124h)] 00405039 add esp,8 0040503C cmp esi,esp 0040503E call _RTC_CheckEsp (439760h) double a=5,c; float b; int d=0x40a00000,y=6; int *p; char s=5; p=&d; b=(float)a; printf("%f,%f,%f,%f,%f,%f,%d",b,c,(float)d,s,(float)s,y,y);00405028 mov esi,esp0040502A mov ecx,dword ptr [y]0040502D push ecx 0040502E mov edx,dword ptr [y]00405031 push edx 00405032 movsx eax,byte ptr [s]00405036 mov dword ptr [ebp-34h],eax00405039 fild dword ptr [ebp-34h]0040503C sub esp,80040503F fstp qword ptr [esp]00405042 movsx ecx,byte ptr [s]00405046 push ecx 00405047 fild dword ptr [d]0040504A sub esp,80040504D fstp qword ptr [esp]00405050 sub esp,800405053 fld qword ptr [c]00405056 fstp qword ptr [esp]00405059 fld dword ptr [b]0040505C sub esp,80040505F fstp qword ptr [esp]00405062 push offset _ORDER_SERVER_ADDRESS-0C4h (43F2ACh)00405067 call dword ptr [__imp__printf (43C124h)]0040506D add esp,30h00405070 cmp esi,esp00405072 call _RTC_CheckEsp (439780h)。
五、C语言有没有DWORD数据类型
C语言没有DWORD数据类型
DWORD数据类型是windows定义的数据类型,不是标准c中的数据类型。
C 语言包含的数据类型如下图所示:
DWORD 就是 Double Word, 每个word为2个字节的长度,DWORD 双字即为4个字节,每个字节是8位,共32位。
可以如下自定义DWORD:
typedef unsigned int DWORD;
转载请注明出处51数据库 » c语言中dword如何输出