C 位運算速度問題,c語言位運算問題?

時間 2023-08-17 22:09:48

1樓:

位運算速度很快。所以,可以用移1位代替乘2或除2,省時。

編譯後的程式都是機內數,機內碼,都是2進位制,不用自己操心。

target=a[6];

a[6] 屬於定址計算,按a的地址,加 6*sizeof(int)把這個地址裡的數賦到target的地址裡。

for (r=0;loop>>=1;r++)這裡有分號,也就是迴圈體是空,白費時間。

你要做:r = 6;

target=a[r];

不如直接寫 target=a[6];

新開闢一個空間如int x[100]; 不費時間,只是分配空間而已。裝入可執行程式時它就在資料區了。

2樓:內內

你的第一種方法和第二種是一樣的,資料和指標在某種意義上是等價。

你要的答案:target=a[6];其它的都不用做,這樣最快。

int x[100];這樣不過才4*100的位元組而已。目前的處理器每秒可以出幾g的位元組。你說你申明的那些算不算小兒科。。

溫馨補充:如果你對陣列長度不能掌握的話就不寫。

像這樣int x;

以後你會接觸到動態資料,自由分配長度的。

祝君學業有成!

c語言位運算問題?

3樓:格里程式設計辦公技巧

c語言位運算問題解答:要解答這個問題我們先來看一個例子,**如下圖一,圖中右邊是問題中得到**,左邊是這段**的彙編指令。兩種情況的不同點詳細說明如下:

第一種情況:printf("%d",2>>64);

由圖中的彙編**可以看出,如果兩個數都是常數的情況下,**中是不含對應的彙編指令的,因為編譯器已經省略了,編譯器算出結果為0,直接把0傳入給printf函式。

第二種情況:int i=2;

printf("%d",i>>64);

此時i是個變數,編譯器沒法在編譯時算出結果,這時就需要通過sarl算術右移指令進行,這裡考慮到溢位這個指令有一個調整機制,它會根據左運算元i型別來調整右運算元,比如這裡i是4位元組32位,也就是它最多右移32位,如果右運算元大於32它會進行64%32=0,所以i>>64相當於i>>0,如果是i>>63,63%32=31相當於i>>31。這種調整不同的編譯器可能會不同,目前gcc是這樣的。

所以這個**在gcc環境下輸出結果為:

gcc -s<>圖一。

4樓:網友

位運算是指按二進位制進行的運算。在系統軟體中,常常需要處理二進位制位的問題。c語言提供了6個位操作。

運算子。這些運算子只能用於整型運算元,即只能用於帶符號或無符號的char,short,int與long型別。

c語言提供的位運算子列表:

運算子 含義 描述。

按位與 如果兩個相應的二進位制位都為1,則該位的結果值為1,否則為0

按位或 兩個相應的二進位制位中只要有一個為1,該位的結果值為1

按位異或 若參加運算的兩個二進位制位值相同則為0,否則為1

取反 ~是一元運算子,用來對一個二進位制數按位取反,即將0變1,將1變0

左移 用來將一個數的各二進位制位全部左移n位,右補0

右移 將一個數的各二進位制位右移n位,移到右端的低位被捨棄,對於無符號數,高位補0

1、“按位與”運算子(&)

按位與是指:參加運算的兩個資料,按二進位制位進行“與”運算。如果兩個相應的二進位制位都為1,則該位的結果值為1;否則為0。

這裡的1可以理解為邏輯中的true,0可以理解為邏輯中的false。按位與其。

實與邏輯上“與”的運算規則一致。邏輯上的“與”,要求運算數全真,結果才為真。若,a=true,b=true,則a∩b=true 例如:

3&5 3的二進位制編碼是11(2)。(為了區分十進位制和其他進位制,本文規。

定,凡是非十進位制的資料均在資料後面加上括號,括號中註明其進位制,二進位制則標記為2)記憶體儲存資料。

的基本單位是位元組(byte),一個位元組由8個位(bit)所組成。位是用以描述電腦資料量的最小單位。

5樓:匿名使用者

位運算簡介c語言中的各種運算都是以位元組的形式進行,在編寫很多系統程式時,如驅動程式、磁碟檔案管理程式等,常要求將資料按位(bit)進行運算或者處理。

6樓:鎮遠山神侍

還真是啊,以前沒留意過。

是不是因為2是數字常量或字元常量(巨集定義),不佔用空間;而i是一般變數,需要佔用空間導致的呢?

馬克一下,看看那個大神知道,共同學習一下。

7樓:網友

c語言位運算詳解 位運算是指按二進位制進行的運算。在系統軟體中,常常需要處理二進位制位的問題。c語言提供了6個位操作 運算子。這些運算子只能用於整型運算元,即。

8樓:祝融團長

我在linux 64位機器環境下做了下實驗,結果都為0

c語言 位運算問題

9樓:匿名使用者

2,右譯1位是將二進位制的5每一位都向右移1位,最後一位捨去。(二進位制)101->10=2

10樓:網友

右移一位就是除以2,左移一位就是乘以2

c++位運算的問題

11樓:匿名使用者

a=13的二進位制為1101然後前面一堆0,按位反之後變0010前面一堆1。

這時的值,計算機在輸出時,是把它當成補碼,換算成原碼為:

補碼:1111...0010

反碼(補碼-1):1111...0001原碼:1000...1110 = 14 首位為符號,1110=8+4+2=14

12樓:萢萢

int 型資料是一般是 4 個位元組,因此為 32 位二進位制,13 的二進位制如下:

按位取反得:

在計算機中因為是用補碼錶示的(整數的補碼等於原碼,負數的補碼等於原碼除符號位外按位取反再加1),因此把這個二進位制轉換成原碼二進位制就知道是多少了,轉換後為:

即 -14 .

13樓:紫菀

有兩種可能,一是你列印的東西是英文。二是你印表機驅動安裝的不對,重新裝一下印表機的驅動就可以了。

c語言位運算問題,c語言 位運算問題??

你好,請問你怎麼知道是帶入的後面的來進行運算?include include int main 如果您是推斷的話,輸出結果為兩個0xffffffff,說明您給的推斷不正確。 int a 1 這是有符號數,vc 編譯器處理為 long int a unsigned char a 0377 轉為無符號數...

c 中的位運算子號,c 中位運算

濱崎步最愛 一 位運算子c語言提供了六種位運算子 按位與 按位或 按位異或 取反 左移 右移 用法 1.按位與運算子 按位與運算子是雙目運算子,其功能是將參與運算的兩運算元各自對應的二進位制為進行於操作。只有對應的兩個二進位制位均為1 是,結果對應的二進位制位才為 1,否則為0.例如 表示式 21 ...

C語言運算問題

樓下的都說得有道理 我執行的結果兩次都是25 其實樓主這個語句就是一個問題 它違背了程式設計中,條理清晰,語句分明的要領。但是作為個人想法,我覺得應該是30才對。過程就像樓下 匿名回答者 說得那樣。不同的編譯器,會有不同的處理方式 所以這個問題不能深究。ps 剛剛看到樓下的說 如果你以後寫程式真的用...