日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言左移15位,关于c语言中左移右移运算符的问题

發布時間:2024/9/18 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言左移15位,关于c语言中左移右移运算符的问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

參照《c與指針》,在c語言中左移時,不論算術左移還是邏輯左移效果都是相同的。而且對于有符號和無符號類型執行相同的操作,即按照二進制位向左左移N位。例如:

1 clude

2 intmain()3 {4 int a = 0xafffffff;5 printf("%dn",a<<1);6 int b = 0xff;7 printf("%dn",b<<1);8 }

ubuntu@ubuntu:~/code/2017.8.28$ ./test31610612734

510

int型變量a在內存中轉換為2進制儲存 1010 1111 1111 1111 1111 1111 1111 1111為一個負整數,b在內存中儲存為 0000 0000 0000 0000 0000 0000 1111 1111為一個正整數,程序結果如上。a左移后轉化為正整數,b轉換為正整數 ,都按2進制左移一位(包括符號位)。

而對于右移來講,針對不同的編譯器,可能會進行算術或邏輯移位。在gcc下進行算術移位,即對于正整數右移,算數移位與邏輯移位相同,右移后左端補0,對于負整數右移,算數移位為符號位1不動,右移后左端補1。

1 #include

2 intmain()3 {4 int a = 0xafffffff;5 printf("%dn",a<<1);6 int b = 0xff;7 printf("%dn",b<<1);8 }

ubuntu@ubuntu:~/code/2017.8.28$ ./test3-671088641

127

a作為負數 右移左端補1,b作為正數右移左端補0,驗證了以上結論。

在左移右移中,如果數據類型總位數小于int,則先轉化為int再進行移位運算。如果左移或右移位數大于數據類型位數,則先進行對數據類型位數取模,再用余數進行移位運算。

1 #include

2 intmain()3 {4 char a = 0x11;5 //for(i = 0;i < 100;i++)6 //{7 //printf("%dn", a>>i);8 //}

9 printf("%dn", a>>(sizeof(int)*8+3));10 printf("%dn", a>>3);11 printf("%lun", sizeof(a>>3));12 printf("%ldn",sizeof(a)) ;13 }

ubuntu@ubuntu:~/code/2017.8.27$ gcc -o test1 test1.c

test1.c: In function ‘main’:

test1.c:9:21: warning: right shift count >= width of type [-Wshift-count-overflow]

printf("%dn", a>>(sizeof(int)*8+3));^ubuntu@ubuntu:~/code/2017.8.27$ ./test12

2

4

1ubuntu@ubuntu:~/code/2017.8.27$

針對一個char型數據,當打印sizeof(a>>3)時輸出為4,說明此時a>>3這個變量為int型。而上邊對于a>>3與a>>(32+3)的輸出結果相同,同時系統警告移位大于

數據類型寬度,證明了上文結論。

內容來源于網絡如有侵權請私信刪除

總結

以上是生活随笔為你收集整理的c语言左移15位,关于c语言中左移右移运算符的问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。