周嵐
摘 要:在很多系統(tǒng)程序中常要求在位(bit)一級進行運算或處理。C語言提供了位運算的功能,這使得C語言也能像匯編語言一樣用來編寫系統(tǒng)程序。位運算說的簡單一些,就是直接對整數(shù)在內(nèi)存中的二進制位進行操作。希望通過本文讓大家了解位運算中鮮為人知的事情。
關(guān)鍵詞:位運算;規(guī)則;左移;右移;可移植
中圖分類號:TP312 文獻標識碼:A
Abstract:In many system program often requires(bit)in a computing or processing.C language provides a calculation function,which makes the C language can be the same as the assembly language used to write the program.Bit operation that simple, just to integer in binary bits in memory operation.Hope that through this article to let everybody know the little-known things bit operation.
Keywords:bit operations;rules;left;right;transplantation
1 引言(Introduction)
程序中的所有數(shù)在計算機內(nèi)存中都是以二進制的形式儲存的。位運算說的簡單一些,就是直接對整數(shù)在內(nèi)存中的二進制位進行操作。比如,and運算本來是一個邏輯運算符,但整數(shù)與整數(shù)之間也可以進行and運算。舉個例子,6的二進制是110,11的二進制是1011,那么6 and 11的結(jié)果就是2,它是二進制對應位進行邏輯運算的結(jié)果(0表示False,1表示True,空位都當0處理)[1]。
在很多系統(tǒng)程序中常要求在位(bit)一級進行運算或處理。C語言提供了位運算的功能,這使得C語言也能像匯編語言一樣用來編寫系統(tǒng)程序。
4 移位運算符(Shift operator)
在使用移位運算符時,我常常會思考這樣兩個問題:
(1)在向右移位時,空出的位是由0填充,還是由符號位填充?
(2)移位計數(shù)允許的取值范圍是什么?
第一個問題的答案很簡單,但有時卻是與具體的C語言實現(xiàn)有關(guān)。如果被移位的對象是無符號數(shù),那么空出的位將被0填充[2]。如果被移位的對象是有符號數(shù),那么C語言實現(xiàn)既可以用0填充空出的位,也可以用符號位的副本填充空出的位。我們?nèi)绻P(guān)注向右移位時空出的位,那么可以將操作的變量聲明為無符號類型,那么空出的位都會被設(shè)置為0。
另外,C語言中位移操作分為算術(shù)位移和邏輯位移,二者都表示為<<和>>運算符。
進行左移操作時,算術(shù)位移和邏輯位移都在結(jié)果右端補0。但是右移時有所不同,算術(shù)位移在左端填充符號位(正數(shù)為0,負數(shù)為1),邏輯位移在左端補0。位移運算的特性結(jié)合C算術(shù)運算時類型提升特性,很容易出錯[3]。讓我們再看一個例子。
5 結(jié)論(Conclusion)
綜上所述,在進行位移操作時,一定要小心上溢,建議在進行左移時先強制將無符號數(shù)(unsigned short, unsigned char)轉(zhuǎn)換為unsigned int,再進行運算。
參考文獻(References)
[1] 譚浩強.C語言程序設(shè)計[M].北京:清華大學出版社,2010:45-46.
[2] 魏書堤,趙輝煌.C語言二進制位運算教學設(shè)計[J].衡陽師范學院學報,2013(6):149-152.
[3] 趙忠孝,楊亞蕾.對C語言指針教學問題的探究[J].計算機教育,2009(19):78-79.
作者簡介:
周 嵐(1977-),女,碩士,講師.研究領(lǐng)域:計算機程序設(shè)計,數(shù)據(jù)庫.endprint
摘 要:在很多系統(tǒng)程序中常要求在位(bit)一級進行運算或處理。C語言提供了位運算的功能,這使得C語言也能像匯編語言一樣用來編寫系統(tǒng)程序。位運算說的簡單一些,就是直接對整數(shù)在內(nèi)存中的二進制位進行操作。希望通過本文讓大家了解位運算中鮮為人知的事情。
關(guān)鍵詞:位運算;規(guī)則;左移;右移;可移植
中圖分類號:TP312 文獻標識碼:A
Abstract:In many system program often requires(bit)in a computing or processing.C language provides a calculation function,which makes the C language can be the same as the assembly language used to write the program.Bit operation that simple, just to integer in binary bits in memory operation.Hope that through this article to let everybody know the little-known things bit operation.
Keywords:bit operations;rules;left;right;transplantation
1 引言(Introduction)
程序中的所有數(shù)在計算機內(nèi)存中都是以二進制的形式儲存的。位運算說的簡單一些,就是直接對整數(shù)在內(nèi)存中的二進制位進行操作。比如,and運算本來是一個邏輯運算符,但整數(shù)與整數(shù)之間也可以進行and運算。舉個例子,6的二進制是110,11的二進制是1011,那么6 and 11的結(jié)果就是2,它是二進制對應位進行邏輯運算的結(jié)果(0表示False,1表示True,空位都當0處理)[1]。
在很多系統(tǒng)程序中常要求在位(bit)一級進行運算或處理。C語言提供了位運算的功能,這使得C語言也能像匯編語言一樣用來編寫系統(tǒng)程序。
4 移位運算符(Shift operator)
在使用移位運算符時,我常常會思考這樣兩個問題:
(1)在向右移位時,空出的位是由0填充,還是由符號位填充?
(2)移位計數(shù)允許的取值范圍是什么?
第一個問題的答案很簡單,但有時卻是與具體的C語言實現(xiàn)有關(guān)。如果被移位的對象是無符號數(shù),那么空出的位將被0填充[2]。如果被移位的對象是有符號數(shù),那么C語言實現(xiàn)既可以用0填充空出的位,也可以用符號位的副本填充空出的位。我們?nèi)绻P(guān)注向右移位時空出的位,那么可以將操作的變量聲明為無符號類型,那么空出的位都會被設(shè)置為0。
另外,C語言中位移操作分為算術(shù)位移和邏輯位移,二者都表示為<<和>>運算符。
進行左移操作時,算術(shù)位移和邏輯位移都在結(jié)果右端補0。但是右移時有所不同,算術(shù)位移在左端填充符號位(正數(shù)為0,負數(shù)為1),邏輯位移在左端補0。位移運算的特性結(jié)合C算術(shù)運算時類型提升特性,很容易出錯[3]。讓我們再看一個例子。
5 結(jié)論(Conclusion)
綜上所述,在進行位移操作時,一定要小心上溢,建議在進行左移時先強制將無符號數(shù)(unsigned short, unsigned char)轉(zhuǎn)換為unsigned int,再進行運算。
參考文獻(References)
[1] 譚浩強.C語言程序設(shè)計[M].北京:清華大學出版社,2010:45-46.
[2] 魏書堤,趙輝煌.C語言二進制位運算教學設(shè)計[J].衡陽師范學院學報,2013(6):149-152.
[3] 趙忠孝,楊亞蕾.對C語言指針教學問題的探究[J].計算機教育,2009(19):78-79.
作者簡介:
周 嵐(1977-),女,碩士,講師.研究領(lǐng)域:計算機程序設(shè)計,數(shù)據(jù)庫.endprint
摘 要:在很多系統(tǒng)程序中常要求在位(bit)一級進行運算或處理。C語言提供了位運算的功能,這使得C語言也能像匯編語言一樣用來編寫系統(tǒng)程序。位運算說的簡單一些,就是直接對整數(shù)在內(nèi)存中的二進制位進行操作。希望通過本文讓大家了解位運算中鮮為人知的事情。
關(guān)鍵詞:位運算;規(guī)則;左移;右移;可移植
中圖分類號:TP312 文獻標識碼:A
Abstract:In many system program often requires(bit)in a computing or processing.C language provides a calculation function,which makes the C language can be the same as the assembly language used to write the program.Bit operation that simple, just to integer in binary bits in memory operation.Hope that through this article to let everybody know the little-known things bit operation.
Keywords:bit operations;rules;left;right;transplantation
1 引言(Introduction)
程序中的所有數(shù)在計算機內(nèi)存中都是以二進制的形式儲存的。位運算說的簡單一些,就是直接對整數(shù)在內(nèi)存中的二進制位進行操作。比如,and運算本來是一個邏輯運算符,但整數(shù)與整數(shù)之間也可以進行and運算。舉個例子,6的二進制是110,11的二進制是1011,那么6 and 11的結(jié)果就是2,它是二進制對應位進行邏輯運算的結(jié)果(0表示False,1表示True,空位都當0處理)[1]。
在很多系統(tǒng)程序中常要求在位(bit)一級進行運算或處理。C語言提供了位運算的功能,這使得C語言也能像匯編語言一樣用來編寫系統(tǒng)程序。
4 移位運算符(Shift operator)
在使用移位運算符時,我常常會思考這樣兩個問題:
(1)在向右移位時,空出的位是由0填充,還是由符號位填充?
(2)移位計數(shù)允許的取值范圍是什么?
第一個問題的答案很簡單,但有時卻是與具體的C語言實現(xiàn)有關(guān)。如果被移位的對象是無符號數(shù),那么空出的位將被0填充[2]。如果被移位的對象是有符號數(shù),那么C語言實現(xiàn)既可以用0填充空出的位,也可以用符號位的副本填充空出的位。我們?nèi)绻P(guān)注向右移位時空出的位,那么可以將操作的變量聲明為無符號類型,那么空出的位都會被設(shè)置為0。
另外,C語言中位移操作分為算術(shù)位移和邏輯位移,二者都表示為<<和>>運算符。
進行左移操作時,算術(shù)位移和邏輯位移都在結(jié)果右端補0。但是右移時有所不同,算術(shù)位移在左端填充符號位(正數(shù)為0,負數(shù)為1),邏輯位移在左端補0。位移運算的特性結(jié)合C算術(shù)運算時類型提升特性,很容易出錯[3]。讓我們再看一個例子。
5 結(jié)論(Conclusion)
綜上所述,在進行位移操作時,一定要小心上溢,建議在進行左移時先強制將無符號數(shù)(unsigned short, unsigned char)轉(zhuǎn)換為unsigned int,再進行運算。
參考文獻(References)
[1] 譚浩強.C語言程序設(shè)計[M].北京:清華大學出版社,2010:45-46.
[2] 魏書堤,趙輝煌.C語言二進制位運算教學設(shè)計[J].衡陽師范學院學報,2013(6):149-152.
[3] 趙忠孝,楊亞蕾.對C語言指針教學問題的探究[J].計算機教育,2009(19):78-79.
作者簡介:
周 嵐(1977-),女,碩士,講師.研究領(lǐng)域:計算機程序設(shè)計,數(shù)據(jù)庫.endprint