c語言把int型變數a高位賦值給char型變數b其中

時間 2021-10-14 23:03:19

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語言裡有個函式可以判斷輸入的是不是數字或者...