1樓:匿名使用者
右移操作需要區分有符號右移和無符號右移,無符號數右移時在前面補零,有符號數右移時在前面補符號位(0或1)
本題16位int型轉化為8位char型,int型的高8位將被階段,實際傳給char型的數值只有低8位,可以用:
b = (char)(a>>8);實現,
加上後面的&有利於**的規整性與可讀性(表明你考慮到了右移操作的有符號和無符號的區別),可以這樣寫:
b = (char)((a>>8)&0x00ff);(注意括號與優先順序,強制轉換優先順序高於&)
另外c語言中使用(char)的強制轉換方式,而static_cast是屬於標準c++的強制轉化方式
2樓:匿名使用者
b = static_cast(a>>8);//這句就已經做到你的要求
實際可以分兩部
a &= 0xff00;
取高位char b = static_cast(a >> 8);
其實和上面的一樣
3樓:匿名使用者
後面的與運算其實不需要,前面char進行了強制型別轉換,只保留低八位
4樓:匿名使用者
static_cast 是強制型別轉換
和b=(char)(a>>8) 是一樣的
5樓:匿名使用者
b=(char)a;數值是一定會有溢位的
6樓:
b=(char)((a>>8) &0x00ff)
應該這樣吧。優先順序好像不是很準確
c語言中,我把int型資料賦給char型,如 int a; char b; a=24; b=a;
7樓:匿名使用者
int a;
char b;
a=24;
b=a;
沒有問題,編譯的時候會有warning ,但是要注意char 、int 的數值範圍;
a = 3.2 賦值後,a的值將變成3;浮點型專轉為整型,小數屬部分會被舍掉
8樓:匿名使用者
int和char是相通的,兩者之間可相互賦值,按上述**,b對應的是一個控制字元cancel
如果把浮點型資料賦值給整型變數,結果會直接取其整數部分,如上述**,結果a=3
c語言中把unsigned char 型資料賦值給int 型資料會不會出問題
9樓:匿名使用者
不會有問題, 反正char的數值再大也不會讓int變成負數,
我不記得這樣賦值有沒有自動的int到unsigned int的升格,
不過肯定不會出問題就是了
10樓:匿名使用者
直接賦bai值會有du
問題。最zhi
好是顯式轉dao換。內
#include
using namespace std;
int main()
11樓:沉思的跳跳虎
這個問題,因為不來知道你具體的使用環源境,沒法作出進一步的判斷,只能將 unsigned char型的變數賦給一個int型的變數會發生什麼事情告訴你。
unsigned char a = 'a';
int b = -1666666;
b = a;
由於unsigned char型別的變數只有一個位元組,而int型別有4個位元組,當將一個unsigned char型別的變數賦給一個int型的變數後,會使int型變數的高三個位元組全部清零。在上述例項中就是b的高三個位元組全部變為0。也就是說b永遠為正整數了。
細節就是這樣了,至於會不會產生***,視你的使用環境而定了。
12樓:
直接賦值,不會有任何問題
13樓:孤獨
強制轉換一下看看,不懂c語言
c語言中int型變數與char型變數什麼情況下不能互換
其實這種問題,從表面說也沒有什麼特別的意義,因為本來就沒有什麼嚴格意義上的能不能互換的問題。只要能在使用過程中,滿足本來的要求就可以了。例如 在將int型變數轉換為char型時,要考慮到資料的溢位問題等 char轉換為int時,要考慮到它的符號問題。在根本上只要認清它們兩者之間的區別就可以了。int...
c語言中int型變數加上double型的變數
程振 會將int型別轉換成double型別再與double型別的變數相加。型別不一樣的數相加,首先將型別轉換成一樣的然後相加,轉換原則,短型別向長型別看齊,長短指在記憶體中所佔空間的長短 得出的結果是double型.這個不需要強制轉換的,系統會自動轉換的. double,計算時會自動轉化之doubl...
在C語言中,怎麼判斷變數是int型的還是char型的
變數是int型的還是char型,是由宣告決定的。函式呼叫時引數型別錯,你編譯時就通不過呀。unsigned char 可以當無符號整型用。 假設函式形式為 int function int n 方法1 判斷實參字長 int function int n 在c語言裡有個函式可以判斷輸入的是不是數字或者...