C 按位運算的型別轉換的問題

2021-04-20 05:28:30 字數 847 閱讀 7544

在微軟的問題區晃了一下,發現有人提出這樣的問題,有些意思,看來.net智慧型化還有待改進。

question:

在visual c#中,不管你宣告的變數是什麼型別,值型別總是會先被轉換位int型別,然後才會進行按位左移操作,即使是強制型別轉換也於事無補。舉個例子來說吧:

byte a=188;

congsole.writeline(a<<8);

即使a是宣告為byte型別的,可是它會隱式轉換為int型別,然後才會進行按位左移

即使這樣也沒用:

console.writeline((byte)a<<8);

我想請教的是如何才能使a不轉換成int型別,而是以byte型別的方式存在,然後才進行按位左移操作?

呵呵,左移8位,最後肯定超出byte的最大值255了,讓你直接轉換的話就會溢位了,既然微軟不給轉回來,只能自己動手了,原始碼如下:

byte a = 188;

console.writeline(a<<8);

int b = a << 8;

byte c =convert.tobyte(b & 0xff);

console.writeline(c);

console.readline();

int是32位的,byte是8位的,取0xff,既二進位制的11111111,亦即00000000 00000000 00000000 11111111 與原來的數字按位與一下,將高位全部捨棄,控制最終的結果處於byte的取值範圍以內,就可以了。

ps:哪位高人能夠解答一下:

convert.tobyte(b & 0xff)  和 (byte)(b & 0xff))的區別呢?都是強制轉換,有時就不能用第二個,困惑中......

python的按位運算

華電北風吹 天津大學認知科學與計算重點實驗室 最後修改日期 2015 8 6 python提供了豐富的位運算操作符,例如按位與,按位或,按位異或,左移位,右移位和取反操作,例子 如下 a,b 45,83 bin a bin b 0b101101 0b1010011 a b,bin a b 127,0...

按位與 的運算

是二進位制 與 運算,參加運算的兩個數的二進位制按位進行運算,運算的規律是 0 0 0 0 1 0 1 0 0 1 1 1 對於參加運算的數要換算為二進位制進行運算,例如7 2的結果是2,過程如下 7 2 0111 0010 0010 2即 按位與運算,兩個當且僅當都為1的時候結果才為1,即1 1 ...

c語言的按位運算子

按位與 按位或 按位異或 1.按位與運算 按位與運算子 是雙目運算子。其功能是參與運算的兩數各對應的二進位相與。只有對應的兩個二進位均為1時,結果位才為1 否則為0。參與運算的數以補碼方式出現。例如 9 5可寫算式如下 00001001 9的二進位制補碼 00000101 5的二進位制補碼 0000...