fork download
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. // ฟังก์ชันแปลงเลขฐานสองเป็น Gray Code
  5. unsigned int binaryToGray(unsigned int num) {
  6. return num ^ (num >> 1); // ใช้การ XOR กับการเลื่อนบิต 1 ตำแหน่ง
  7. }
  8.  
  9. // ฟังก์ชันแปลงเลขฐานสองเป็น Signed Decimal (2's complement)
  10. int binaryToSigned(int num, int bits) {
  11. if (num & (1 << (bits - 1))) { // ตรวจสอบ MSB
  12. num -= (1 << bits); // ถ้า MSB=1 ให้ลบออกจากจำนวนเต็ม
  13. }
  14. return num;
  15. }
  16.  
  17. // ฟังก์ชันแปลงเลขฐานสองเป็น Fixed Point [4.4]
  18. double binaryToFixedPoint(int num) {
  19. return num / 16.0; // แบ่งด้วย 2^4 (16) เนื่องจาก [4.4] หมายถึงทศนิยม 4 หลัก
  20. }
  21.  
  22. int main() {
  23. char binary[9]; // รับเลข 8 บิต (พร้อม '\0')
  24. unsigned int decimal = 0; // เก็บค่าเป็น unsigned decimal
  25. int bits = 8; // จำนวนบิต 8 บิต
  26.  
  27. // รับค่าจากผู้ใช้
  28. printf("Enter a binary code [8-bit]: ");
  29. scanf("%8s", binary);
  30.  
  31. // แปลงจาก String Binary เป็น Unsigned Decimal
  32. for (int i = 0; i < bits; i++) {
  33. if (binary[i] == '1') {
  34. decimal += (1 << (bits - 1 - i));
  35. }
  36. }
  37.  
  38. // แปลงเป็น Signed Decimal (2's complement)
  39. int signedDecimal = binaryToSigned(decimal, bits);
  40.  
  41. // คำนวณ Gray Code
  42. unsigned int grayCode = binaryToGray(decimal);
  43.  
  44. // คำนวณ Fixed Point [4.4]
  45. double fixedPoint = binaryToFixedPoint(decimal);
  46.  
  47. // แสดงผลลัพธ์
  48. printf("unsigned decimal : %u\n", decimal);
  49. printf("octal: %o\n", decimal);
  50. printf("hexadecimal: %X\n", decimal);
  51. printf("signed decimal (2's complement): %d\n", signedDecimal);
  52. printf("gray code: %u [%08d]\n", grayCode, grayCode);
  53. printf("fixed point [4.4]: %.5lf\n", fixedPoint);
  54.  
  55. return 0;
  56. }
Success #stdin #stdout 0s 5288KB
stdin
Standard input is empty
stdout
Enter a binary code [8-bit]: unsigned decimal : 0
octal: 0
hexadecimal: 0
signed decimal (2's complement): 0
gray code: 0 [00000000]
fixed point [4.4]: 0.00000