c語言位運算,怎樣修改每一位的值呢

2021-03-07 08:15:42 字數 4003 閱讀 9074

1樓:童年的秋天

ch | = (1<<3)

1左移3位 再和ch按位或就好了拉

要置0的話 就

ch & = ~ (1<<3)

2樓:

就三種情況,以單位元組為例說明:

將某一位置1,無論原來是0是1,操作後肯定是1,「按位或(即操作符'|')」乙個該位為1,其餘位為0的單位元組數。如a=00001000,b=000000010,則a | b=00001010,即把第1位變成1了。注意位數從右至左是0~7。

將某一位置0,無論原來是0是1,操作後肯定是0,「按位與(即操作符'&')」乙個該位為0,其餘位為1的單位元組數。如a=00001010,b=11111101,則a | b=00001000,即把第1位變成0了。

將某一位變反,即原為1時變為0,原為0時變為1,「按位異或(即操作符'^')」乙個該位為1,其餘位為0的單位元組數。如a=00001000,b=000001000,則a | b=00000000,即把第3位變反為0了。

這裡的舉例以一次改變1位為例,實用中可以同時改變多位,要改變的每一位都遵從以上規則。

3樓:匿名使用者

這個就要用到位運算了

比如lz說的,就應該是ch^(1<<2)

用二進位制表示的話,就是

0000 0000 0000 0001 <<20000 0000 0000 0100

然後0000 0000

^ 0000 0100

----------------

0000 0100

4樓:匿名使用者

假如你讓乙個數的第n位變為1則讓該數與2的n-1次方 做位或運算比如你要第三位變為1

那麼就讓它與4相或 就可以了

這個第幾位是從右向左數的

5樓:

使用|和&運算子

回答過於簡單,請適當進行補充,這是什麼鬼?

說的密密麻麻的才是好答案?

一邊玩去。。。

6樓:匿名使用者

unsigned i=1;第n位;

ch^=(1<

7樓:匿名使用者

位運算子有| & << >>

c語言位運算會不會改變原變數的值

8樓:abc小鴨

位運算不會

改變原變數的值。要改變原變數的值需要經過賦值表示式實現。

~取反,0取反是1,1取反是0

《是左移,比如1<>右移,類似左移,數值大小除以2的n次方&按位與,1與任意數等於任意數本身,0與任意數等於0,即1&x=x,0&x=0

|按位或,x|y中只要有乙個1則結果為1

^按位異或,x^y相等則為0,不等則為1

9樓:匿名使用者

不會改變的,除非你這樣 m= (unchar) (m>>2);

如此m的值才會改變,你可以單步執行看看結果

10樓:匿名使用者

會改變例如:m=17二進位制是00010001有移兩位是00000100低位捨去無符號時高位補零右移n位相當於除以2^n

11樓:匿名使用者

不會,將m賦比人,是不會改變的

c語言問題,在位運算中,運算元每右移一位,其結果相當於什麼?若左移1位,其結果相當於什麼?

12樓:非常可愛

1、右移,除以2右移n位除以2的n次方;

右移的概念和左移相反,就是往右邊挪動若干位,運算子是》;

右移對符號位的處理和左移不同,對於有符號整數來說,比如int型別,右移會保持符號位不變,例如:

inti=0x80000000;

i=i>>1;//i的值不會變成0x40000000,而會變成0xc0000000

2、左移,乘以2左移n位乘以2的n次方;

先說左移,左移就是把乙個數的所有位都向左移動若干位,在c中用《運算子。例如:inti=1;

i=i<<2;//把i裡的值左移2位

左移就是:丟棄最高位,0補最低位

擴充套件資料

符號位向右移動後,正數的話補0,負數補1,也就是組合語言中的算術右移。同樣當移動的位數超過型別的長度時,會取餘數,然後移動餘數個位。

負數10100110>>5(假設字長為8位),則得到的是11111101

在c中,左移是邏輯/算術左移(兩者完全相同),右移是算術右移,會保持符號位不變。實際應用中可以根據情況用左/右移做快速的乘/除運算,這樣會比迴圈效率高很多。

13樓:多xdl點事

每右移一位就是除以2,左移一位就是乘以2。c語言中,數字是二進位制儲存的,左移和右移就是變化為2的指數形式。

演示**:

#include

int main()

程式執行結果:

擴充套件程式c語言中,移位運算子組成的表示式也屬於算術表示式,其值為算術值。左移運算是將乙個二進位制位的運算元按指定移動的位數向左移動,移出位被丟棄,右邊移出的空位一律補0。

右移運算是將乙個二進位制位的運算元按指定移動的位數向右移動,移出位被丟棄,左邊移出的空位一律補0,或者補符號位,這由不同的機器而定。在使用補碼作為機器數的機器中,正數的符號位為0,負數的符號位為1。

14樓:匿名使用者

左移乘二,右移除以2,都是整除,比如5>>15的二進位制表示是101

那麼右移一位之後是10就是2了,是整除的

左移的話就是在後面補乙個零,相當於是乘以二那麼變成了1010,十進位制是10

15樓:匿名使用者

c語言問題,在位運算中,運算元每右移一位,其結果相當將左值除以2

若左移1位,其結果相當於將左值乘以2

16樓:

右移,除以2

左移,乘以2

17樓:rr子騰

左移n位運算元乘以2的n次方冪

右移n位運算元除以2的n次方冪

18樓:匿名使用者

10000001 <<1 ==>1000 0010 相當於指數加1

c語言 菜鳥問題 運算元的位運算不改變原運算元的值

19樓:

就像有賦值語句 a=2;

然後左移兩位 a<<2;

a還是2

並沒有變成 8

關於c語言位運算,賦值的問題,回答詳細一點。為什麼按位取反後輸出的結果不一樣?

20樓:匿名使用者

~val 可以理解成乙個右值,%d 表示~val預設為int型 自然就是-3了

newval = ~val; 等於是強制轉換了型別, newval是無符號char 自然就是0xff-2= 253

%hhd 表示是乙個可以把int型當成unsigned char輸出 自然也是253

21樓:匿名使用者

2的二進位制是00000010,取反得到11111101,最高位為1,說明這是個負數的補碼。負數的補碼,是由其絕對值的原碼取反加1得到,反過來,將負數的補碼減1取反,就得到其絕對值的原碼。11111101-1=11111100,再取反得到00000011,即十進位制的3。

也就是說該負數的絕對值為3,那麼這個負數為-3。

所以第乙個值是-3

整型的每一種都分有無符號(unsigned)和有符號(signed)兩種型別(float和double總是帶符號的),在預設情況下宣告的整型變數都是有符號的型別(char有點特別),如果需宣告無符號型別的話就需要在型別前加上unsigned。

你宣告變數無符號,將二進位制轉換無符號在轉換十進位制,導致最高位由原來的符號位變成了有效數字位了,參與轉換

所以最後結果是253

你去掉前面的unsigned 兩個值應該是一樣的

每一位媽媽都愛自己的孩子改為反問句

難道不是每一位媽媽都愛自己的孩子嗎?難道每乙個媽媽都不愛自己的孩子嗎?每一位媽媽難道不會愛自己的孩子嗎?哪一位媽媽不愛自己的孩子?每位媽媽都愛自己的孩子嗎?天下的母親都愛自己的孩子.雙重否定句 天下的母親沒有不愛自己的孩子的。天下的母親都沒有不愛zi己的孩子的。天下的父母沒有不愛自己孩子的。老師愛學...

C語言中的右移一位是不是應該除以

右移一來位相當於除以2。例 5 1 5的二自進bai制表示是101,那麼右移一位之du後是zhi10就是2了,是整除的 左移的dao話就是在後面補乙個零,相當於是乘以二,那麼變成了1010,十進位制是10。101右移,就是把最後一位拿掉了,是10這個是二進位制的,十進是2,5 2本來是小數,但這裡是...

昨天去了柏林禪寺,並且真誠的拜過每一位佛菩薩!跟朋友一塊出來後,寺的旁邊有佛教用品專賣店,朋友

那個應該不是真正的法師,真正的佛 不會借佛斂財。祈禱佛菩薩最重要的是恭敬心 誠心,有心就有功德,給不給錢 錢多錢少都不重要。佛菩薩也不需要我們供養,我們供養只是為自己積累功德。所以,供養應該出於自願。所以,你不用送錢過去。記得下次不要再上當了。穿僧衣的,不見得是出家人,不能輕信。但是見到僧衣應該尊重...