我正在手动计算 Windows 控制台中的单元格数量。 (是的,我知道可以从填充的 CONSOLE_SCREEN_BUFFER_INFO 结构中获取此信息。)
#include <windows.h>
#include <stdio.h>
int main(void)
{
HANDLE hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE);
RECT workarea;
COORD c;
SystemParametersInfoW(SPI_GETWORKAREA, 0, &workarea, 0);
printf("Rectangle: %ld x %ld\n", workarea.right, workarea.bottom);
c.X = workarea.right / 8;
c.Y = workarea.bottom / 12;
printf("Cells: %d x %d\n", c.X, c.Y);
return 0;
}
RECT 工作区
是一个包含四个长整数的结构。 COORD c
是一个包含两个短整数的结构。
将长整数除以整数(例如,如上所述的 8 或 12)时,将所得常量分配给短整数是否存在问题?正如预期的那样,Visual Studio 2012 会生成编译时警告。
但是在测试这个特殊情况时,SystemParametersInfoW(SPI_GETWORKAREA, 0, &workarea, 0)
只给出 RECT workarea
我的桌面分辨率减去任务栏高度(例如 1680) x 1010 像素)。
当然,这些数字完全在短整数范围内。所以,我想问题是:在这种特殊情况下是否有可能丢失数据?
最佳答案
当您将 long
与 int
相除时,结果将具有数据类型 long
(两者中较大的一个)。 如果结果适合 short
,则将结果分配给 short
时不会丢失数据。
关于c - 将 LONG 除以 INT 并分配给 SHORT - 在一种情况下可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19420357/