我又來問有關位元運算轉換的問題了
最近在苦讀位元進制等等技術
嘗試用了一個& and 運算符
這麼寫是沒什麼問題誠如我註解所寫
//295 = > 0001 0010 0111 & ff => 1111 1111 = > 0010 0111 => HEX 27, DEC 39
不過我這樣只比到了前兩個byte
於是我想改成這樣
編譯器出現警告,但還是編譯過去了
warning: unsigned conversion from ‘int’ to ‘unsigned char’ changes value from ‘295’ to ‘39’ [-Woverflow]
unsigned char a = 295 & 0xfff;
而且我最後也得到 a = 27,但這並不是我要的答案 因為我明明一次比對了三個位元組阿?
295 => 0001 0010 0111
0xfff => 1111 1111 1111
做&and運算,應該答案要如小算盤一樣啊,小算盤的運算也是正確的
這邊編譯出了什麼問題嗎?
還是有什麼我觀念沒有釐清的 請鞭小力點,小弟想趕快熟悉位元組的轉換與運算
https://ithelp.ithome.com.tw/questions/10206915
前幾天,你的問題,裡面有一張圖, unsigned char 的範圍 0~255. 就是一個 byte 能夠存的
10進位整數範圍.
你用 295 , 那就超過了.那就需要使用 short, int 等更大範圍的資料型態.
先把這個數值範圍有個基本的記憶.編譯器當然會警告,因為你這樣使用,會發生危險.
另外,你不知道在哪個時候,就有點迷思了,295 怎會變成 三個 bytes 來表示.
你別把 ASCII 的文字字符,跟數值搞混了.