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 剛剛看到樓下的說 如果你以後寫程式真的用...