最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言位運算和sizeof運算符詳解

 更新時間:2016年11月27日 16:00:50   投稿:lqh  
這篇文章主要介紹了C語言位運算和sizeof運算符詳解的相關(guān)資料,這里提供了詳細(xì)的知識要點,并附簡單代碼示例,需要的朋友可以參考下

位運算和sizeof運算符

      C語言中提供了一些運算符可以直接操作整數(shù)的位,稱為位運算,因此位運算中的操作數(shù)都必須是整型的。位運算的效率是比較高的,而且位運算運用好的話會達到意想不到的效果。位運算主要有6種:與(&),或(|),取反(~),異或(^),左移(<<),右移(>>)。

1.位運算中的類型轉(zhuǎn)換

      位運算都必須進行Integer Promotion。在進行運算之前,都必須將char型、short型的數(shù)據(jù)轉(zhuǎn)換為int或者unsigned int型再參與運算。

如下面這段程序:

#include<stdio.h>

int main(void)
{
  unsigned char c=0xfc;
  unsigned int i=~c;
  printf("0x%x\n",i);
  return 0;
}

在對c取反之前,先將c提升為int型,則為0x000000fc,取反之后結(jié)果就是0xffffff03,所以程序輸出結(jié)果是0xffffff03,而不是0x00000003.

2.異或運算的一些特性。

  a^0=a,a^a=0這兩個特性是異或運算最常用的特性。

 利用這個特性可以不借助臨時變量就可以交換兩個整數(shù)

#include<stdio.h>

int main(void)
{
  int a=3;
  int b=2;
  a=a^b;
  b=a^b;
  a=a^b;
  printf("%d %d\n",a,b);
  return 0;
}

  不借助臨時變量交換兩個數(shù)據(jù)還可以用另外一種方法。

  a=a+b;

  b=a-b;

  a=a-b;

 這兩種方法各有優(yōu)點和缺點,位運算只能用于交換整數(shù),而第二種可能會發(fā)生溢出。

3.sizeof運算符

   sizeof是一個特殊的運算符,它有兩種形式:sizeof 表達式和sizeof (類型名).對于sizeof運算符要注意幾點:

   1)如果是表達式的話,括號可以省略,但是對于類型,括號不能??;

   2)sizeof求算的是所占的空間,如果作用于表達式,這個表達式是不進行求值的,只根據(jù)類型轉(zhuǎn)換求得表達式的類型,而表達式的類型在編譯時就可以確定。

#include<stdio.h>

int main(void)
{
  int i=1;
  int j;
  j=sizeof i++;
  printf("%d %d\n",i,j);
  return 0;
}

程序執(zhí)行結(jié)果為:

1 4

Press any key to continue

可以看出i的值并沒有改變,可知表達式i++并沒有進行求值。

再看下面這個程序:

#include <stdio.h>

int main(int argc, char *argv[])
{
  char ch ='a';
  int i =10;
  printf("%d\n",sizeof i+ch);
  return 0;
}

執(zhí)行結(jié)果為:

101

在有二元運算符的表達式中,必須加括號,否則sizeof只會對第一個操作數(shù)進行空間計算。由于ch的整形值為97,加上4,便是101了。

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關(guān)文章

  • 推薦幾款實用的C++ 在線工具

    推薦幾款實用的C++ 在線工具

    這篇文章主要推薦了幾款實用的C++ 在線工具,幫助大家更好的進行c++開發(fā),感興趣的朋友可以了解下載。
    2020-10-10
  • C++/STL實現(xiàn)判斷平面內(nèi)兩條線段的位置關(guān)系代碼示例

    C++/STL實現(xiàn)判斷平面內(nèi)兩條線段的位置關(guān)系代碼示例

    這篇文章主要介紹了C++/STL實現(xiàn)判斷平面內(nèi)兩條線段的位置關(guān)系代碼示例,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • C語言?柔性數(shù)組的使用詳解

    C語言?柔性數(shù)組的使用詳解

    柔性數(shù)組(Flexible?Array)是引入的一個新特性,它允許你在定義結(jié)構(gòu)體時創(chuàng)建一個空數(shù)組,而這個數(shù)組的大小可以在程序運行的過程中根據(jù)你的需求進行更改特別注意的一點是:這個空數(shù)組必須聲明為結(jié)構(gòu)體的最后一個成員,并且還要求這樣的結(jié)構(gòu)體至少包含一個其他類型的成員
    2022-03-03
  • C++中進行txt文件讀入和寫入的方法示例

    C++中進行txt文件讀入和寫入的方法示例

    這篇文章主要給大家介紹了C++中進行txt文件讀入和寫入的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用C++具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • 一篇文章帶你了解C語言函數(shù)的可重入性

    一篇文章帶你了解C語言函數(shù)的可重入性

    這篇文章主要為大家詳細(xì)介紹了C語言函數(shù)的可重入性,文中介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • C++使用map實現(xiàn)多進程拷貝文件的程序思路

    C++使用map實現(xiàn)多進程拷貝文件的程序思路

    這篇文章主要介紹了C++使用mmap實現(xiàn)多進程拷貝文件,通過本文給大家分享程序思路及完整代碼,代碼簡單易懂,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12
  • QT5交叉編譯入門級教程(arm64、mips64)

    QT5交叉編譯入門級教程(arm64、mips64)

    交叉編譯就是在當(dāng)前系統(tǒng)平臺上,開發(fā)編譯運行于其它平臺的程序,比如本文硬件環(huán)境是x86平臺,但是編譯出來的程序是在arm64架構(gòu)、mips64等架構(gòu)上運行,本文給大家分享QT5交叉編譯入門級教程(arm64、mips64),感興趣的朋友一起看看吧
    2023-11-11
  • 一文詳解C++中的mutable關(guān)鍵字

    一文詳解C++中的mutable關(guān)鍵字

    在C++中mutable關(guān)鍵字正如字面意思所示,表示「可變的」之意,一般在以下兩種情況中使用較多,一是修飾類中的變量,用來突破const的限制,二是在Lambda表達式中使用,用來捕獲修改表達式之外的變量值,下面我們就針對這兩種使用場景逐個介紹
    2023-10-10
  • C++?string如何獲取文件路徑文件名、文件路徑、文件后綴(兩種方式)

    C++?string如何獲取文件路徑文件名、文件路徑、文件后綴(兩種方式)

    這篇文章主要介紹了C++?string如何獲取文件路徑文件名、文件路徑、文件后綴(兩種方式),具有很好的參考價值,希望對大家有所幫助。
    2023-06-06
  • C++實現(xiàn)添加桌面右鍵新建菜單

    C++實現(xiàn)添加桌面右鍵新建菜單

    本文給大家匯總了3個版本的C++實現(xiàn)添加桌面右鍵新建菜單的代碼,陸陸續(xù)續(xù)寫的,有需要的小伙伴可以根據(jù)自己的需求來選擇
    2016-01-01

最新評論

乐平市| 洪泽县| 青川县| 福贡县| 板桥市| 疏勒县| 若羌县| 旺苍县| 贵阳市| 株洲市| 田东县| 将乐县| 门头沟区| 临沭县| 梨树县| 盘锦市| 勐海县| 固始县| 淮滨县| 高尔夫| 桐梓县| 丰镇市| 远安县| 祁连县| 上犹县| 崇左市| 乌什县| 临海市| 靖远县| 安图县| 仁寿县| 灵台县| 靖宇县| 锡林郭勒盟| 峨边| 缙云县| 高青县| 高要市| 南溪县| 泸定县| 泸州市|