0
我正在手動計算Windows控制檯中的單元格數量。 (是的,我知道這個信息是從一個充滿CONSOLE_SCREEN_BUFFER_INFO結構。)用INT劃分LONG並分配給SHORT - 可能在一種情況下?
#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 workarea
是一個包含四個長整數的結構。 COORD c
是一個有兩個短整數的結構。
將長整數除以整數(例如8或12,如上所述)時,是否存在將產生的常量分配給短整數的問題?如預期的那樣,Visual Studio 2012會產生編譯時警告。
但是在測試這種特殊情況下,SystemParametersInfoW(SPI_GETWORKAREA, 0, &workarea, 0)
僅給出了我的桌面分辨率減去任務欄高度(例如1680 x 1010像素)的RECT workarea
。
這些數字當然是在短整數範圍內。所以,我想這個問題是:在這種特殊情況下是否存在數據丟失的可能性?
很好的答案,謝謝。所以如果你有'long int i = 100'並且想要將它放在'short int j'中,它就適合了。這是因爲'i'實際上是'100'而不是'0000000100'(一個10位的數字)? –
C中的整數類型總是數字,所以是的,'i'實際上是'100'。 –
只要分割的結果保證小於或等於32,767,就不會有問題。如果它大於這個值,你會有數值溢出。在你的情況下,這意味着只要分辨率保持低於水平261408像素和垂直392112像素,你的程序就能按預期工作。 –