ค่าสูงสุดและต่ำสุดของแต่ละตัวแปร integer ในภาษา C

เราสามารถหาค่าสูงสุดและต่ำสุดของตัวแปร ตัวเลขจำนวนเต็ม (Integer) แต่ละชนิดในภาษา C ได้จากค่า Define ที่อยู่ใน ไฟล์ limit.h
ตารางด้านล่างนี้แสดง Define ที่ใช้สำหรับกำหนดค่าสูงสุด (Max) หรือต่ำสุด (Min)

ซึ่งสามารถนำเอาค่า Define มา print แสดงค่าได้ โดย Include ไฟล์ limit.h ดัง Source code ตัวอย่าง

#include <stdio.h>
#include <limits.h> /* For limits on integer types */

int main(void)
{
    //unsigned char
    printf("min unsigned char = 0\n");
    printf("max unsigned char max = %u\n",UCHAR_MAX);
    printf("size unsigned char = %d\n\n", sizeof(unsigned char));
     //char
    printf("min char = %d\n",CHAR_MIN);
    printf("max char = %d\n", CHAR_MAX);
    printf("size char = %d byte\n\n\n",sizeof(char));

    //unsigned int
    printf("min unsigned int = 0\n");
    printf("max unsigned int  = %u\n", UINT_MAX);
    printf("size unsigned int  = %d\n\n", sizeof(unsigned int));
    //int
    printf("min int = %d\n", INT_MIN);
    printf("max int = %d\n", INT_MAX);
    printf("size int = %d byte\n\n\n", sizeof(int));


    //unsigned short
    printf("min unsigned short = 0\n");
    printf("max unsigned short = %u\n", USHRT_MAX);
    printf("size unsigned short = %d\n\n", sizeof(unsigned short));
    //short
    printf("min short = %d\n",SHRT_MIN);
    printf("max short = %d\n",SHRT_MAX);
    printf("size short = %d byte\n\n\n",sizeof(short));
    

    //unsigned long
    printf("min unsigned long = 0\n");
    printf("max unsigned long =  %lu\n",ULONG_MAX);
    printf("size unsigned long = %d\n\n",sizeof(unsigned long));
    //long
    printf("min long = %ld\n",LONG_MIN);
    printf("max long = %ld\n",LONG_MAX);
    printf("size long = %d byte\n\n\n", sizeof(long));


    //unsigned logn long
    printf("min unsigned long long = 0\n");
    printf("max unsigned long long = %llu\n", ULLONG_MAX);
    printf("min unsigned long long = %d\n\n", sizeof(unsigned long long));
    //logn long
    printf("min long long = %lld\n", LLONG_MIN);
    printf("max long long = %lld\n", LLONG_MAX);
    printf("size long long = %d byte\n\n\n", sizeof(long long));
    
    return 0;
}

จะได้ผลลัพธ์ดังนี้ (Windows 7 32 bit, gcc 4.9.2)

min unsigned char = 0
max unsigned char max = 255
size unsigned char = 1

min char = -128
max char = 127
size char = 1 byte

min unsigned int = 0
max unsigned int = 4294967295
size unsigned int = 4

min int = -2147483648
max int = 2147483647
size int = 4 byte

min unsigned short = 0
max unsigned short = 65535
size unsigned short = 2

min short = -32768
max short = 32767
size short = 2 byte

min unsigned long = 0
max unsigned long = 4294967295
size unsigned long = 4

min long = -2147483648
max long = 2147483647
size long = 4 byte

min unsigned long long = 0
max unsigned long long = 18446744073709551615
min unsigned long long = 8

min long long = -9223372036854775808
max long long = 9223372036854775807
size long long = 8 byte

การอ้างอิงที่อยู่ของการ Include Header file

การ Include header file ที่เราสร้างขึ้นมาโดยใช้ #include “file” แต่ว่าหากเราจะอ้างอิงที่อยู่ของ header file ในกรณีที่อยู่คนละ folder นั้นเราสามารถทำได้ โดยแบ่งได้เป็น 2 แบบ

แบบที่ 1 include header file ที่อยู่ใน folder ที่อยู่ใน level มากกว่า (folder ย่อยลึกเข้าไป)
จะใช้เครื่องหมายทับ \ ในการระบุ folder ย่อยๆเข้าไป โดยยึดจุดอ้างอิงจาก file .c ของเรา
สมมติว่าเรามี File ตามที่อยู่นี้
D:\Desktop\helloworld1.c
และ
D:\Desktop\test\helloworld1.h
เราสามารถ Include ได้โดย

#include <stdio.h>
#include "test/helloworld1.h"

int main (void)
{
    printf("%s\n", HELLO);
    return 0;
}

และแบบที่ 2 include header file ที่อยู่ใน folder ที่อยู่คนละ level
จะใช้เครื่องหมาย.จุดจุด .. ในการระบุ folder ที่ต้องออกมา 1 ชั้น โดยยึดจุดอ้างอิงจาก file .c ของเรา เช่นกัน

สมมติว่าเรามี File ตามที่อยู่นี้
D:\Desktop\main\helloworld2.c
และ
D:\Desktop\test\helloworld2.h
เราสามารถ Include ได้โดย

#include <stdio.h>
#include "../test/helloworld2.h"

int main (void)
{
    printf("%s\n", HELLO);
    return 0;
}

และอีกกรณี ก็คือ ต้องอ้างอิงออกไปมากกว่า 1 ชั้น โดย .. จะใช้แทนการอ้างอิงออกจาก folder นั้น 1 ชั้น
D:\Desktop\main\submain\helloworld3.c
และ
D:\Desktop\test\helloworld3.h

#include <stdio.h>
#include "../../test/helloworld3.h"

int main (void)
{
    printf("%s\n", HELLO);
    return 0;
}

หลักการใช้ #include

เราสามารถ แบ่งการ Include ในภาษา C ได้เป็น 2 แบบ นั้นก็คือ

#include <file>

และ

#include "file"

สังเกตได้ว่าจะแตกต่างกันที่เครื่องหมาย “” และ < >

เราจะใช้ < >

#include <file>

สำหรับการ include ไฟล์ ที่อยู่ใน folder ของ compiler เช่น header files (.h) ที่เป็นมาตรฐาน string.h, stdio.h, math.h หรือ library ที่เป็นมาตรฐานมากับ compiler อยู่แล้ว เหล่านี้เป็นต้น

ส่วน “”

#include "file"

จะเป็นการ include header file ที่ไม่ได้อยู่ใน folder compiler หรือ เป็น header file (.h) ที่เราสร้างขึ้นมาเอง

การใช้ #include ที่ไม่ถูกต้องอาจจะทำให้ compile แล้วเกิด warning หรือ error ก็ได้ขึ้นอยู่กับ compiler แต่ละตัว ดังนั้นควรจะใช้ #include ให้ถูกต้องกันด้วยละ

มารู้จักการ Comment ในภาษา C

เราสามารถแบ่ง การ comment ในการเขียนโปรแกรมภาษา C ออกได้เป็น 2 แบบ นั้นก็คือ Line comment กับ Block comment

Line comment จะสามารถ comment ได้ เพียงบรรทัดเดียวต่อครั้งโดยใช้ เครื่องหมายทับ 2 ตัว (//) หน้าบรรทัดที่เราอยาก comment
ตัวอย่าง Line comment

#include <stdio.h>

int main(void)
{

    // This is 
    // block 
    // comment
    printf("Hello world\n");

    return 0;
}

Block comment สามารถ comment code ได้หลายบรรทัดในครั้งเดียว โดยใช้ เครื่องหมาย ทับแล้วตามด้วยเครื่องหมายดอกจัน (/*) เพื่อเปิด comment และ เครื่องหมายดอกจันแล้วตามด้วยเครื่องหมายทับ(*/) เพื่อ ปิด comment
ตัวอย่าง Block comment

#include <stdio.h>

int main(void)
{

    /* This is 
    block 
    comment */ 
    printf("Hello world\n");

    return 0;
}

แต่การใช้ Block comment มีข้อควรระวังก็คือ code ที่เราจะ comment นั้นห้ามมี block comment อยู่ (ห้าม block comment ซ้อนกัน) จะทำให้ compile ไม่ผ่านได้
ตัวอย่าง Block comment ที่ compile ไม่ผ่าน

#include <stdio.h>

int main(void)
{

    /* This is 
    /*block */
    comment */ 
    printf("Hello world\n");

    return 0;
}

ตัวเลขจำนวนจริง (Real number) VS ตัวเลขจำนวนเต็ม (Integer number)

ในภาษา C เราสามารถแบ่งตัวแปรที่เป็นตัวเลขออกได้เป็น 2 ประเภทนั้นก็คือ ตัวเลขจำนวนจริง (Real number) และ ตัวเลขจำนวนเต็ม (Integer number)


ตัวเลขจำนวนจริง ก็คือ ตัวเลขที่เราวัดได้จากค่าจริงๆเช่น ส่วนสูงของเรา 180.23 เซนติเมตร, ต้นไม้สูง 10.23 เมตร หรือ ความเร็ว 64.53 กิโลเมตรต่อชั่วโมง เป็นต้นเราจะเห็นได้ว่าตัวเลขเหล่านี้ล้วนแล้วแต่เป็นค่าที่มีทศนิยม เพราะค่าเหล่านี้ล้วนแต่เป็นค่าที่วัดได้จริงๆ ดังนั้นในภาษา C หรือในภาษาโปรแกรมมิ่งทางคอมพิวเตอร์ จึงเรียกว่าว่าเป็น ตัวเลขจำนวนจริง Real number นั้นเอง


ตัวเลขจำนวนเต็ม ก็คือตัวเลขที่ไม่มีจุดทศนิยมนั้นเอง ตัวอย่างของ ตัวเลขจำนวนเต็ม(Integer number) เช่น รถ 3 คัน, จักรยาน 3 คัน, คน 1581 คน, บ้าน 1 หลัง เหล่านี้เป็นต้น

ทีนี้เพื่อนๆก็คงจะรู้จักกับตัวเลขในภาษา C ทั้ง 2 ประเภทกันแล้ว ว่าแต่ละประเภทเป็นอย่างไรและแตกต่างกันอย่างไร

วิธีแก้ไข ### ขึ้นเต็ม Cell ใน Excel

มีใครเคยเจอปัญหานี้บ้าง มี Cell หนึ่งที่มีตัว # ขึ้นเต็มทั้ง Cell ไปหมด แบบนี้

หลายๆคนคงจะคิดและอาจจะทำแบบนี้ คิดว่าอาจจะเป็นเพราะ Cell มีขนาดเล็กกว่าข้อมูล ก็เลยลองยืด Cell ขยายออกไปทางด้านข้างดูก็ยังมีผลลัพธ์เหมือนเดิม ยังคงเป็นสัญลักณ์ # อยู่

จริงๆแล้วสาเหตุที่ Cell นั้นแสดงผลเป็น ### นั้นเป็นเพราะว่า ข้อมูลใน Cell นั้นมี Format เป็น Text และ มีความยาวของตัวอักษรเกิน 256 ตัวอักษรนั้นเอง

วิธีแก้ไขก็คือให้เราทำการ เปลี่ยน Format ของ Cell เป็น General
มาดูวิธีทำตามตัวอย่างกันเลย

ก่อนอื่นให้เปลี่ยน Format โดยคลิกขวาที่ Cell นั้น แล้วเลือก Format Cells…

เปลี่ยน เป็น General แล้วกด OK

จะเห็นว่าข้อมูลใน Cell นั้นอ่านออกแล้ว

ปรับขนาดของ Cell ให้อ่านข้อมูลได้ เท่านี้ก็เสร็จเรียบร้อย

มารู้จักประโยชน์ของ Formula mode ใน Excel กันดีกว่า

สมมติเรามี ค่าอยู่ใน Cell A1, A3, A5 … แล้วเราต้องการก๊อปปี้มาใส่ Column C แต่ต้องการให้เรียงติดกันเป็น C1, C2, C3 …

ถ้าเราก๊อปปี้ Cell มาแล้วใช้วิธีลาก Cell ใน Column C ก็จะได้ผลลัพธ์ตามรูป นั้นคือจะไม่ได้อย่างที่เราต้องการ

วิธีทำง่ายๆก็คือต้องใช้ Formula mode ใน Excel
นั้นก็คือให้เราเข้าไปที่ Formula mode ใน Excel โดยการกด Ctrl + ~ (กด Ctrl แล้วตามด้วยปุ่มตัวหนอนเปลี่ยนภาษา) ก็จะทำให้เราเข้าสู่ Formula mode แล้วละ จะสังเกตได้ว่าจะมีเครื่องหมาย= อยู่ใน Cell

วิธีทำก็คือให้เราใส่ค่าเป็น A1 A3 A5 แล้วลาก Cell ให้ Excel มันรันตัวเลขของ Cell ที่เราอย่างได้ให้อัตโนมัติ

เสร็จแล้วเราก็ก๊อปปี้ไปใส่ Notepad แล้วทำการใส่ เครื่องหมายเท่ากับ = ให้มันสะ (โดยการ replace A เป็น =A)

แล้วก็เอามาวางใน Excel ที่เป็น โหมด Formula อยู่

แล้วทำการเปลี่ยนโหมดกลับมาเป็นเหมือนเดิมก็จะได้ดังภาพ

และนี้ก็เป็นอีกหนึ่งวิธีการประยุกต์ใช้งาน Formula โหมดใน Excel จ้า

วิธีการ Uninstall MinGW

วิธีลบ หรือ Uninstall MinGW สามารถทำได้ง่ายๆโดย

สามารถเข้าไปลบ Folder ที่ MinGW ติดตั้งอยู่ ทิ้งได้เลย ตัวอย่างของที่อยู่ที่ติดตั้ง MinGW ก็เช่น
C:\MinGW
C:\Program Files (x86)\CodeBlocks\MinGW
C:\Program Files\CodeBlocks\MinGW

ขั้นตอนต่อไปก็เข้าไปลบ ที่อยู่ PATH environment variable ของ MinGW
ซึ่งสามารถทำได้ตามนี้เลย
ไปที Properties My computer

แล้วเข้าไปที่ Advanced system settings

กดไปที่แถบ Advanced แล้วกดไปที่ Environment Variables

เข้าไป Edit ที่ตัวแปร PATH แล้วให้เราลบเฉพาะ path ที่มีการระบุถึง path ของ MinGW (ขั้นตอนนี้ให้ระวังนะ ห้ามไปลบ path ของโปรแกรมอื่นละ)

เท่านี้ก็เป็นการลบ MinGW ออกไปอย่างถูกต้องแล้วละ

วิธีเปิด SMBv1 ของ Windows กลับมา

สำหรับคนที่ได้ทำการปิด SMBv1 ไป เพื่อป้องกันปัญหาจาก มัลแวร์เรียกค่าไถ่ WannaCry สำหรับ
Windows Vista, Windows Server 2008, Windows 7, Windows Server 2008 R2, Windows 8 และ Windows Server 2012 ที่ทำตามขั้นตอนจาก ที่นี้ https://www.blognone.com/node/92410
แล้วดันไปเจอปัญหาว่า ไม่สามารถเข้า Public drive ของบริษัท หรือ Nas server ได้ เนื่องจาก Server ยังคงใช้ SMBv1 ทำให้เราใช้งานไม่ได้

ดังนั้นเราก็ต้อง Enable SMBv1 กลับมาใหม่ โดย

ไปที่เปิด cmd

แล้วพิมพ์คำสั่ง sc.exe config lanmanworkstation depend= bowser/mrxsmb10/mrxsmb20/nsi
แล้วกด Enter

แล้วก็ตามด้วย sc.exe config mrxsmb10 start= auto
แล้วกด Enter

แล้วทำการ Restart เครื่อง

เสร็จแล้วก็จะสามารถเข้า Public drive ของบริษัท หรือ Nas server ได้ดังเดิม
แล้วใช้วิธี update windows แทน เพื่อป้องกัน WannaCry นะ