初學C,位運算子的幾個不懂之處!

2024-12-31 08:30:26 字數 4740 閱讀 9936

1樓:高金山

value 是2位元組能和 01000000按位與!按位與的時候,會把它們都擴充套件成int型整數(4個位元組)的。

系統會把01000000當8進位的。你可以寫成16進位0x40,或者8進位0100,或者10進位64

如果數字前面有0x標識,系統認為他是16禁止,如果數字前面有0,系統認為他是8禁止,否則就是10進位。

從功能實現的角度考慮,如果是負數,補碼應該取反加1的,如果是正數,補碼是它本身。

8進位的01000000 是二進位的 100 0000 0000 0000 0000

為什麼寫成if(z==01000000)?可能後面少寫了乙個0吧。

2樓:網友

你的輸入只能是三位和兩位或是一位數字(如果是三位的話了,第一位只能是符號位,也就是0或1,同時也需要注意你輸入011和11是一樣的,單數如果要輸入-1(十進位時),只能是101,不能是)

scanf("%o",&a);表示以無符號的8進位數輸入,例;

當輸入101時,系統先把八進位數轉化為二進位數001000001,但需要9個位元組,但是不夠,只把記憶體的8個位元組分別填為01000001,與01000000與時得01000000,此時取反加一得10111111,此時以八進位無符號數輸出(從左到右依次取三位構成一位)的177(後兩位因為不足三位,所以系統認為是符號位)

c語言中的位運算子有哪些?

3樓:可愛的哈夫曼

c 語言中有以下位運算子:

按位與):將兩個數的二進位每一位同時與(and)起來,並將結果賦給左運算元。盯純。

按位或):將兩個數的二進位每一位同時或(or)起來,並將結果賦給左運算元。

按位異或):將兩個數的二進凱蘆咐制每一位同時異或(xor)譁梁起來,並將結果賦給左運算元。

左移):將左運算元的二進位數向左移動右運算元指定的位數,並將結果賦給左運算元。

右移):將左運算元的二進位數向右移動右運算元指定的位數,並將結果賦給左運算元。

按位取反):將左運算元的二進位數按位取反(即 1 變為 0,0 變為 1),並將結果賦給左運算元。

希望這些可以幫助到你。

4樓:良慶慕容思博

位操作運算都只能是整形或字元型,字元型實際是單位元組整形。

包括以下幾個操作符:

按位與&,按位或,按位異或,左移<<,右移》

另外還有乙個取餘操作:%

a%b的意思是,a除以b,取餘數。

這個是c語言的硬性規定,位操作都是正數按照二進位進行表達的時候才有的概念;而取餘操作是整數相除州戚豎得餘數,餘冊大數必須也是正數。

一 下面列舉了c語言一些常見的領域(包括但不限於)

1)應用軟體;

2)對效能要求嚴格的領域,一般對效能有嚴格要求的地方都是用c語言編寫的,比如網路程式的底層和網路伺服器端底層、地圖查詢等;

3)系統軟體和圖形處理,c語言具有很強的繪圖能力和可移植性,並且具備很強的資料處理能力,可以用來編寫系統軟體、製作動畫、繪製二維圖形和三維圖形等;

4)數字計算,相對於其他程式語言,c語言是數字計算能力超強的高階語言;

5)嵌入式裝置開發;

6)遊戲軟體開發;

二。執行時:

1,不是字串型別的轉換為字串,tostring();

進位的時候可以進行傳參,其他時候不可以,undeinfed和null

無法返回。2,前置運算子。+或者。

是先運算再賦值,後置運算子。

或者--是先賦值再運算。

例如:varname

varname

varage

name++;

varage

name;alert(name);

這個值是101;

alert(name);

這個值是。alert(age);

這個值是100;

alert(age);

這個值是101;

3,在運算中,布林值。

false這仔塵個值是0

true是。

比較運算中。

如果兩個乙個是。

數值,乙個是數字字串,那麼會把字串轉成數值。比較。

在c語言的算術運算子中,運算物件必須是整數的運算子是()。

5樓:實用科技小百科

在c語言的算術運算子中,運算物件必須是整數的運算子是()。

a./b.%

c.%和/d.*

正確答案:%

位運算子及其使用

6樓:天羅網

參考文獻。

最高位是符號位;0表示正數;1表示負棚旅數

正數的原碼、反碼、補碼相同。

123的原碼:00000000 00000000 00000000 01111011

123的反碼鉛核:00000000 00000000 00000000 01111011

123的補碼:00000000 00000000 00000000 01111011

負數的原碼是按照絕對值轉換後,最高位補1;反碼是除符號位外,所有位取反;補碼為反碼加1;

123的原碼:10000000 00000000 00000000 01111011

123的反碼:11111111 11111111 11111111 10000100

123的補碼:11111111 11111111 11111111 10000101

平時進行的運算實則是反碼之間的運算。

判斷奇偶性。

a & 1 ==0 ,a為偶數;a & 1 ==1,a為基數;

求平均數。a & b) +a ^ b) >1)

x,y交換資料。

x ^=y ; y^=x ; x^=y

求絕對值。a ^ a >>31) -a >>31))

判斷乙個數是否是槐和掘2的冥。

a & a - 1) =0

相反數。~x + 1)

作為標誌位。

eg:red = 0001

blue = 0010

yellow = 0100

0111:代表紅藍黃。

0101:代表紅黃。

位運算子

7樓:科創

位昌檔運算子有哪些?

位運算子都是操作的二進位。

用法,|,的用法。

有0則0:有1則1

相同則0,不數運同則1

按位取反。例:分析:

上面這些運算子會將數字轉換成2進位再進行運算。6的二進位是110,3的二進位是011。根據上面的用法規則裡面,列幾個豎式:

00000000 00000000 00000000 00000110 6的原碼反碼補碼都是本身。

11111111 11111111 11111111 11111001 對6取反,得到-7的補碼。

00000000 00000000 00000000 00000001 補碼減1

11111111 11111111 11111111 11111000 反碼。

10000000 00000000 00000000 00000111 原碼(-7)

小練習。1、請實現兩個整數變數耐畢亂的交換(不能使用第三方變數)

2、最有效率的算出2 * 8的結果。

答案分析。1、實現兩個整數變數的交換很簡單,但是這道題目卻明確指出不能使用第三方變數。有兩種方法。

方法一:方法一有個缺點,如果數值超出了int型別的取值範圍,將會損失精度。

方法二:2、直接操作二進位是比較快的,所以使用左移符號。

位運算子

8樓:科創

21(十進位整數)

首先將21轉換位二進位。

10101 向左移兩位,空出位置補0 於是變成了。

1010100 轉為十進位:1 * 22

所以銀李 21 <<2 = 84

總結:每向左移一位相當於在原來數上的基礎乘以2,即 21 * 2n

n為向左移位數。舉例說明:

21(十進位整數)

首先將21轉換位二進位。

10101向右移兩位,前方位置補零於是變成了。

00101 轉為十進位:1 * 20

所以 21 >>2 = 5

總結:每向右移一位相當於在原來數上的基礎除以2,即 21 / 2nn為向右移位數。推導過程:

位運算子的效率高於算術運算子。

經典面試題:

最高效的方式笑搏侍計算 2 * 8 ?

答: 2 <<3 或 8 <<1

過程。12 =>1100(二進位碰吵)

5 =>0101(二進位)比較過程:

結果為 0100(二進位) =4 (十進位)總結:只有當比較雙方都為1時,結果才為1,,否則為0過程。12 =>1100(二進位)

5 =>0101(二進位)比較過程:

結果為: 1101(二進位) =13(十進位)總結:當比較雙方只要有乙個為1,那麼其值為1,否則為0過程。12 =>1100(二進位)

5 =>0101(二進位)比較過程:

結果為:1001(二進位) =9 (十進位)總結:當比較雙方都為異(值不同)時,才等於1,否則為0過程。6 =>0110(二進位)

包括符號位在內的所有數取反。

即變為1001 =>7

注意:要將二進位碼轉換為補碼才能進行取反,取反包括符號位

c語言中的位運算子中 按位取反 是怎麼運算的

使用 按位取反運算的時候,計算機會將運算元所對應的二進位制表示式的每一版 個位進行取反權計算,取反後所得到的值就是 按位取反的運算結果。例如,假如計算機是32位的,接下來要計算 5的值,計算過程如下 5 的二進位制表示式為 0000 0000 0000 0000 0000 0000 0000 010...

關於c運算子優先順序和的,C中運算子優先順序的問題

a和a 含義不同啊,a 表明先執行後加減,所以還是從0開始的。c 中運算子優先順序的問題 假定陣列是 int y 指標是 int symbol y int x 222 語句 symbol x 因為是字尾 表示式裡不自增,故計算分2步走,版1 1 symbol x 1 2 symbol symbol ...

請教關於c 運算子過載的問題,謝謝

如果不用 實際上語法是沒錯的呢?而且執行也是可以的呢?答案是yes,引用array v表示回的含義是v和傳入的函答數實參共用一片記憶體區域,對v進行賦值等操作也會對傳入的實參造成修改,如果不用 的話那在過載函式中所使用的變數v就是實參的一個副本,也即另外開闢一片記憶體區域再複製一份與函式實參一模一樣...