//// 16位無符號強轉有符號 測試用例// 由于第一位表示正負的位是0,強制轉換有符號后,仍然是0,所以無影響 0-32767 (32767=15個1,最左邊符號位仍然是0)之間都是無影響的unsigned short* pUS = new unsigned short(32767); signed short* pS = (signed short*)pUS;std::cout << *pS << std::endl;// 如果32768 對應二進制位1000000000000000,如果是有符號的話,最左邊一位表示符號,所以后面是0,最終結果也就是0unsigned short* pUS1 = new unsigned short(32768);signed short* pS1 = (signed short*)pUS1;std::cout << *pS1 << std::endl;// 存儲的時候對應的字節數都是一樣的,所以我們通常存儲都用unsigned char* / signed char*都表示一個字節,再具體的計算的時候,一定結合實際的數據類型// 比如數據類型為short, 那么我們再內存操作的時候memcpy(pshort, pchar, length*sizeof(short)),每次要讀取兩個字節作為一個short// 然后再將內存的字節轉換為實際的數字的時候,需要結合數據類型,分為有符號和無符號兩種,// 比如我們將一個short(兩個字節的內存)轉換為一個unsigned short的數字的時候,short* pS2 = new short(0);*pS2 = 0xffff;unsigned short* pUS2 = (unsigned short*)pS2;std::cout << *pUS2 << std::endl;// 需要注意的是我們不用擔心內存數據被破壞,我們只是將二進制的內存數據用不同的方式來解讀而已,// 所以我們也不要在意,選擇存儲內存的時候是選擇unsigned char* 還是 signed char*,都無所,因為二者所占字節數相同// 如果實際應用場景,全是16位也就是兩個字節,那么選擇內存的時候,最好選擇short*/
?16位無符號強轉有符號 測試用例
由于第一位表示正負的位是0,強制轉換有符號后,仍然是0,所以無影響 0-32767 (32767=15個1,最左邊符號位仍然是0)之間都是無影響的?
1、存儲的時候對應的字節數都是一樣的,所以我們通常存儲都用unsigned char* / signed char*都表示一個字節,再具體的計算的時候,一定結合實際的數據類型
2、比如數據類型為short, 那么我們再內存操作的時候memcpy(pshort, pchar, length*sizeof(short)),每次要讀取兩個字節作為一個short
3、然后再將內存的字節轉換為實際的數字的時候,需要結合數據類型,分為有符號和無符號兩種,
4、需要注意的是我們不用擔心內存數據被破壞,我們只是將二進制的內存數據用不同的方式來解讀而已,
5、所以我們也不要在意,選擇存儲內存的時候是選擇unsigned char* 還是 signed char*,都無所,因為二者所占字節數相同
6、如果實際應用場景,全是16位也就是兩個字節,那么選擇內存的時候,最好選擇short*
?一些自己的理解,可能存有誤差,還望大佬指點一二