iT邦幫忙

0

C 位元運算符號 &

  • 分享至 

  • xImage

我又來問有關位元運算轉換的問題了
最近在苦讀位元進制等等技術
嘗試用了一個& and 運算符

https://ithelp.ithome.com.tw/upload/images/20220111/20137810RplcMxmHAi.png
這麼寫是沒什麼問題誠如我註解所寫
//295 = > 0001 0010 0111 & ff => 1111 1111 = > 0010 0111 => HEX 27, DEC 39

不過我這樣只比到了前兩個byte
於是我想改成這樣https://ithelp.ithome.com.tw/upload/images/20220111/20137810LyuISbhsq5.png
編譯器出現警告,但還是編譯過去了
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/upload/images/20220111/20137810VSezCD7SAs.png
這邊編譯出了什麼問題嗎?
還是有什麼我觀念沒有釐清的 請鞭小力點,小弟想趕快熟悉位元組的轉換與運算
/images/emoticon/emoticon06.gif

powerc iT邦新手 1 級 ‧ 2022-01-11 17:01:38 檢舉
就overflow了阿...
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

1
一級屠豬士
iT邦大師 1 級 ‧ 2022-01-11 16:47:35
最佳解答

https://ithelp.ithome.com.tw/questions/10206915

前幾天,你的問題,裡面有一張圖, unsigned char 的範圍 0~255. 就是一個 byte 能夠存的
10進位整數範圍.
你用 295 , 那就超過了.那就需要使用 short, int 等更大範圍的資料型態.
先把這個數值範圍有個基本的記憶.編譯器當然會警告,因為你這樣使用,會發生危險.

另外,你不知道在哪個時候,就有點迷思了,295 怎會變成 三個 bytes 來表示.
你別把 ASCII 的文字字符,跟數值搞混了.

你用 295 , 那就超過了.那就需要使用 short, int 等更大範圍的資料型態.

沒辦法
因為 C 語言裡只有 unsigned char 這一種資料型態
沒有其他

https://ithelp.ithome.com.tw/upload/images/20220111/20001787VeYWMt5W5c.png

我要發表回答

立即登入回答