鍙傝?a >How do you set, clear and toggle a single bit in C?
c/c++涓浜岃繘鍒朵綅鐨勬搷浣滃寘鎷緗煇浣嶄負1銆佹竻闄ゆ煇浣嶏紙緗負0錛夈佸紑鍏蟲煇浣?toggling a bit)銆佹鏌ユ煇浣嶆槸鍚︿負1絳夈傝繖浜涙搷浣滆緝涓哄父瑙佸茍涓斿彲浠ヤ綔涓哄叾浠栦綅榪愮畻鐨勫熀紜鎺ュ彛錛屼互涓嬬綏鍒楀嚑縐嶆柟娉曪細
number |= 1 << x; // 璁劇疆絎瑇浣嶄負1
number &= ~(1 << x); // 緗x浣嶄負0
number ^= 1 << x;
if (number & (1 << x))
鐩稿簲鍦版垜浠彲浠ュ皢鍏跺皝瑁呰搗鏉ワ紝綆渚跨殑鏂規硶鏄嬌鐢ㄥ畯鏉ュ皝瑁咃細
#define BIT_SET(a,b) ((a) |= (1<<(b)))
#define BIT_CLEAR(a,b) ((a) &= ~(1<<(b)))
#define BIT_FLIP(a,b) ((a) ^= (1<<(b)))
#define BIT_CHECK(a,b) ((a) & (1<<(b)))
榪欎釜浣跨敤璧鋒潵綆鍗曞緢澶氾細
struct bits {
unsigned int a:1;
unsigned int b:1;
unsigned int c:1;
};
struct bits mybits;
// set/clear a bit
mybits.b = 1;
mybits.c = 0;
// toggle a bit
mybits.a = !mybits.a;
mybits.b = ~mybits.b;
mybits.c ^= 1;
// check a bit
if (mybits.c)
榪欎釜鏂規硶鍏跺疄綾諱技浜庝嬌鐢ㄤ綅緇撴瀯錛屽彧涓嶈繃STL鍖呰浜嗚繖涓粨鏋勫畾涔夛紝褰撶劧榪樻彁渚涗簡寰堝渚挎嵎鐨勬帴鍙o細
std::bitset<5> bits;
bits[0] = true;
bits[1] = false;
bits.set(2);
bits.flip(3);
bits.reset(2);
鍙傝?a >What is the name of this operator: “–>”?
c/c++涓互涓嬩唬鐮佹槸鍚堟硶鐨勶細
#include <stdio.h>
int main()
{
int x = 10;
while( x --> 0 ) // x goes to 0
{
printf("%d ", x);
}
}
-->
鏄竴涓悎娉曠殑鎿嶄綔絎︼紝鎴戞墦璧岃嚜璁/c++鐔熸墜鐨勪綘浠兘涓嶇煡閬撹繖涓搷浣滅銆傛湁浜虹О瀹冧負goes to
鎿嶄綔絎︼紝x-->0
琛ㄧずx鍚?瓚嬭繎銆?/p>
鍏跺疄鎴戝湪蹇芥偁浣犱滑銆?/strong> 騫朵笖鎴戠浉淇℃湁寰堝浜哄姝ゆ妸鎴忕浉褰撶啛鎮夈傛病閿欙紝 綾諱技鐨勬妸鎴忚繕鏈夛細-->
鍙槸涓や釜鎿嶄綔絎︽伆濂介亣鍦ㄤ簡涓璧鳳紝浠栦滑鏄嚜鍑忚繍綆楃--
鍜屽ぇ浜庢瘮杈冭繍綆楃>
錛?/p>
while (x-- > 0)
...
while (x -- \
\
\
\
> 0)
printf("%d ", x);
鍙傝?a >Is using memcmp on array of int strictly conforming?
浠ヤ笅浠g爜涓瀹氫細杈撳嚭ok鍚楋紵
#include <stdio.h>
#include <string.h>
struct S { int array[2]; };
int main () {
struct S a = { { 1, 2 } };
struct S b;
b = a;
if (memcmp(b.array, a.array, sizeof(b.array)) == 0) {
puts("ok");
}
return 0;
}
鎴戝湪vs2005浠ュ強gcc4.4.3涓婂仛浜嗘祴璇曪紝閮借緭鍑轟簡ok銆備絾榪欏茍涓嶆剰鍛寵繖涓唬鐮佷細姘歌繙杈撳嚭ok銆傞棶棰樹富瑕侀泦涓簬榪欓噷浣跨敤浜嗚祴鍊艱鍙ユ潵澶嶅埗鍊鹼紝浣嗗嵈浣跨敤浜唌emcmp榪欎釜鍩轟簬鍐呭瓨鏁版嵁姣旇緝鐨勫嚱鏁版潵姣旇緝鍊箋?/p>
c璇█涓殑璧嬪艱繍綆楃錛?錛夎瀹氫箟涓哄熀浜庡肩殑澶嶅埗錛岃屼笉鏄熀浜庡唴瀛樺唴瀹圭殑澶嶅埗銆?/p>
C99 section 6.5.16.1 p2: In simple assignment (=), the value of the right operand is converted to the type of the assignment expression and replaces the value stored in the object designated by the left operand.
榪欎釜鍏跺疄寰堝ソ鐞嗚В錛屽挨鍏跺湪涓嶅悓綾誨瀷鐨勬暟瀛楃被鍨嬮棿澶嶅埗鏃訛紝渚嬪錛?/p>
float a = 1.1;
int b = a;
鍥犱負嫻偣鏁板拰鏁村艦鏁扮殑鍐呭瓨甯冨眬涓嶄竴鏍鳳紝鎵浠ヨ偗瀹氭槸鍩轟簬鍊肩殑涓縐嶅鍒躲傚彟澶栵紝鎸夌収璇█鏍囧噯鐨勬濊礬鏉ョ湅錛屽唴瀛樺竷灞榪欑涓滆タ涓鑸兘灞炰簬瀹炵幇鐩稿叧鐨勶紝鎵浠ヨ璦鏍囧噯鏄笉浼氫緷璧栧疄鐜板幓瀹氫箟璇█鐨勩?/p>
涓婇潰鐨勫畾鐞嗗悓鏍風敤浜庡鏉傛暟鎹被鍨嬶紝渚嬪緇撴瀯浣撱傛垜浠兘鐭ラ亾緇撴瀯浣撴瘡涓垚鍛樹箣闂村彲鑳戒細鏈夊瓧鑺傝ˉ榻愶紝鑰屼嬌鐢ㄨ祴鍊艱繍綆楃鏉ュ鍒舵椂錛屼細涓嶄細澶嶅埗榪欎簺琛ラ綈瀛楄妭鐨勫唴瀹癸紝鏄璦鏍囧噯鏈瀹氱殑銆傝繖鎰忓懗鐫浣跨敤memcmp姣旇緝涓や釜閫氳繃璧嬪艱繍綆楃澶嶅埗鐨勪袱涓粨鏋勪綋鏃訛紝鍏剁粨鏋滄槸鏈畾鐨勩?/p>
浣嗘槸涓婇潰鐨勪唬鐮佷緥瀛愪腑錛屾瘮杈冪殑鍏跺疄鏄袱涓猧nt鏁扮粍銆傝繖涔熸棤娉曠‘璁ょ粨鏋滃悧錛熻繖涓棶棰樻渶緇堥泦涓簬錛岄毦閬搃nt涔熶細鏈変笉紜畾鐨勮ˉ榻愬瓧鑺傛暟鎹紵
C99 6.2.6.2 integer types For signed integer types, the bits of the object representation shall be divided into three groups: value bits, padding bits, and the sign bit. […] The values of any padding bits are unspecified.
榪欒瘽鍏跺疄鎴戜篃涓嶅お鎳傘備竴涓湁絎﹀彿鏁存暟int錛屽叾鍐呬篃鏈夎ˉ榻愪簩榪涘埗浣?bits)錛?/p>
浣嗘棤璁哄浣曪紝榪欎釜渚嬪瓙閮戒笉綆椾弗璋ㄧ殑浠g爜銆備漢浠殑寤鴻鏄嬌鐢╩emcpy鏉ュ鍒惰繖縐嶆暟鎹紝鍥犱負memcpy鍜宮emcmp閮芥槸鍩轟簬鍐呭瓨鍐呭鏉ュ伐浣滅殑銆?/p>
鎴戜嬌鐢ㄧ殑wxLua鐗堟湰淇℃伅涓?code>wxLua 2.8.7.0 built with wxWidgets 2.8.8錛屼篃灝辨槸LuaForWindows_v5.1.4-40.exe榪欎釜瀹夎鍖呴噷鑷甫鐨剋xLua銆傛垜涓嶇煡閬撳叾浠杦xWidgets鐗堟湰閲寃xListCtrl鎬庢牱錛屼絾鎴戜嬌鐢ㄧ殑鐗堟湰閲寃xListCtrl鏄笉鏀寔緙栬緫閲岄潰鐨勫瓙item鐨勩傚湪鎴戜嬌鐢ㄧ殑report妯″紡涓嬶紝瀛恑tem涔熷氨鏄壒瀹氭煇涓琛屼竴鍒楃殑item銆?/p>
google浜嗕竴涓嬶紝鍙戠幇鎮插墽鍦伴渶瑕佽嚜宸卞疄鐜幫紝涓昏灝辨槸鑷繁鏄劇ず涓涓獁xTextCtrl錛?/p>
--
-- file: wxListCtrlTextEdit.lua
-- author: Kevin Lynx
-- date: 08.06.2012
--
local EditList = {}
-- get the column by an abs point
function EditList:getColumn(x)
local cols = self.listctrl:GetColumnCount()
local cx = 0
for i = 0, cols - 1 do
local w = self.listctrl:GetColumnWidth(i)
if x <= cx + w then return i end
cx = cx + w
end
return -1
end
-- when a mouse down, show a text edit control
function EditList:onLeftDown(evt)
if self.editor:IsShown() then
self:closeEditor()
end
local p = evt:GetPoint()
local row = evt:GetIndex()
local col = self:getColumn(p.x)
local rect = wx.wxListCtrlEx.GetSubItemRect(self.listctrl, row, col)
rect:SetHeight(rect:GetHeight() + 5) -- adjust
self.editor:SetSize(rect)
self.editor:Show()
self.editor:SetValue(wx.wxListCtrlEx.GetItemText(self.listctrl, row, col))
self.editor:SetFocus()
self.col = col
self.row = row
end
function EditList:closeEditor()
if not self.editor:IsShown() then return end
self.editor:Hide()
self.listctrl:SetItem(self.row, self.col, self.editor:GetValue())
end
function EditList:initialize()
self.editor = wx.wxTextCtrl(self.listctrl, wx.wxID_ANY, "", wx.wxDefaultPosition, wx.wxDefaultSize, wx.wxTE_PROCESS_ENTER + wx.wxTE_RICH2)
self.editor:Connect(wx.wxEVT_COMMAND_TEXT_ENTER, function () self:closeEditor() end)
-- not work actually
self.editor:Connect(wx.wxEVT_COMMAND_KILL_FOCUS, function () self:closeEditor() end)
self.editor:Hide()
end
function wx.wxListCtrlTextEdit(listctrl)
local o = {
listctrl = listctrl,
editor = nil,
}
local editlist = newObject(o, EditList)
editlist:initialize()
listctrl:Connect(wx.wxEVT_COMMAND_LIST_ITEM_RIGHT_CLICK, function (evt) editlist:onLeftDown(evt) end)
listctrl:Connect(wx.wxEVT_COMMAND_LIST_ITEM_FOCUSED, function () editlist:closeEditor() end)
return listctrl
end
鍏跺師鐞嗗氨鏄幏鍙栧埌褰撳墠榧犳爣鐐瑰嚮鎵鍦ㄧ殑瀛恑tem浣嶇疆錛岀劧鍚庡湪姝や綅緗樉紺轟竴涓獁xEditCtrl鍗沖彲銆備互涓婁唬鐮侀渶瑕佷緷璧栨垜涔嬪墠鍐欑殑Lua閲屽疄鐜扮畝鍗曠殑綾?瀵硅薄涓殑浠g爜錛屽悓鏃朵緷璧栦互涓嬮拡瀵箇xListCtrl鐨勬墿灞曟帴鍙o細
--
-- file: wxListCtrlExtend.lua
-- author: Kevin Lynx
-- date: 08.07.2012
-- brief: extend some util functions to wx.wxListCtrl
--
wx.wxListCtrlEx = {}
function wx.wxListCtrlEx.GetSubItemRect(listctrl, item, col)
local rect = wx.wxRect()
listctrl:GetItemRect(item, rect)
local x = 0
local w = 0
for i = 0, col do
w = listctrl:GetColumnWidth(i)
x = x + w
end
return wx.wxRect(x - w, rect:GetY(), w, rect:GetHeight())
end
function wx.wxListCtrlEx.GetItemText(listctrl, item, col)
local info = wx.wxListItem()
info:SetId(item)
info:SetColumn(col)
info:SetMask(wx.wxLIST_MASK_TEXT)
listctrl:GetItem(info)
return info:GetText()
end
鍦ㄦ垜鐪嬪埌鐨剋xWidgets瀹樻柟鏂囨。閲岋紝鍏跺疄wxListCtrl宸茬粡鏈?code>GetSubItemRect鎺ュ彛錛屽茍涓斿湪鍙︿竴浜涚ず渚嬩唬鐮侀噷錛屼篃鐪嬪埌浜?code>GetItemText鎺ュ彛錛屼絾鏄紝鎴戜嬌鐢ㄧ殑鐗堟湰閲屾病鏈夛紝鎵浠ュ彧濂借嚜宸卞啓銆傚熀浜庝互涓婏紝瑕佷嬌鐢ㄨ繖涓彲浠ユ敮鎸佺紪杈戝瓙item鐨剋xListCtrl錛屽彲浠ワ細
list = wx.wxListCtrlTextEdit(wx.wxListCtrl(dialog, wx.wxID_ANY, wx.wxDefaultPosition, wx.wxDefaultSize, wx.wxLC_REPORT))
涔熷氨鏄氳繃wx.wxListCtrlTextEdit榪欎釜鍑芥暟鍋氫笅澶勭悊錛岃繖涓嚱鏁拌繑鍥炵殑鏄湰韜殑wxListCtrl銆傚綋鐒舵洿濂界殑鏂瑰紡鏄嬌鐢ㄧ戶鎵夸箣綾葷殑鏂瑰紡錛屽紑鍙戜竴縐嶆柊鐨勬帶浠訛紝浣嗗湪Lua涓紝閽堝usedata綾誨瀷鐨勬墿灞曡矊浼煎彧鑳借繖鏍蜂簡銆?/p>
鏈濂藉悙妲戒笅錛岃繖涓帶浠舵墿灞曞叾瀹炲緢鎭跺績銆傛湰鏉ユ垜鎵撶畻褰撶紪杈戞帶浠跺け鍘葷劍鐐瑰悗灝遍殣钘忓畠錛屼絾鏄線緙栬緫鎺т歡涓婃敞鍐孠ILL_FOCUS浜嬩歡濮嬬粓涓嶈搗浣滅敤錛涙垜鍙堟墦綆楀紕涓狤SC閿洏浜嬩歡鍘繪墜鍔ㄥ彇娑堬紝浣嗘樉鐒秝xTextCtrl鏄笉鏀寔閿洏浜嬩歡鐨勩傚ソ鍚э紝鍑戝悎鐢ㄤ簡銆?/p>