यह जांचने के लिए कि बाइट में कोई निश्चित बिट सेट है या नहीं?जांच रहा है कि कोई बिट सेट है या नहीं
bool IsBitSet(Byte b,byte nPos)
{
return .....;
}
यह जांचने के लिए कि बाइट में कोई निश्चित बिट सेट है या नहीं?जांच रहा है कि कोई बिट सेट है या नहीं
bool IsBitSet(Byte b,byte nPos)
{
return .....;
}
लगता है होमवर्क की तरह एक सा है, लेकिन:
bool IsBitSet(byte b, int pos)
{
return (b & (1 << pos)) != 0;
}
स्थिति 0 कम से कम महत्वपूर्ण बिट है, स्थिति 7 सबसे अधिक है।
अभी तक एक और लाइनर मैं हमेशा इसे सीखने के बजाय Google के लिए Google :) – grapkulec
यहां शब्दों में समाधान है।
प्रारंभिक मान 1 एन बार के साथ एक पूर्णांक को बाएं स्थानांतरित करें और फिर मूल बाइट के साथ एक और करें। यदि परिणाम शून्य नहीं है, तो बिट अन्यथा सेट नहीं है। :)
ठीक है। 3 का बाइट, परीक्षण करें कि बिट 1 सेट है। तो 1 << 1 है 2. 2 और 3 सत्य नहीं है। असमर्थ रहे हैं। – spender
@ स्पेंडर: गलती, निश्चित रूप से 2 और 3 2 है (बाइनरी 10 और 11 = 10 में) जो शून्य नहीं है और इसलिए एक वास्तविक परिणाम है। ठीक है, सी # आपको ऐसा नहीं करने देता है जैसे सी/सी ++ करता है तो आपको एक! = 0 परीक्षण की आवश्यकता होगी। – Skizz
शायद चेक गैर-शून्य के लिए होना चाहिए? afaik, शून्य शून्य सच नहीं है। – spender
अधिकार अपने इनपुट शिफ्ट n नीचे बिट्स और 1 के साथ मुखौटा है, तो परीक्षण करते हैं कि आप 0 या 1.
मैं इस तरह से भी पसंद करता हूं, बाएं स्थानांतरित करना बस इतना अप्राकृतिक लगता है :) – leppie
कुछ
तरहreturn ((0x1 << nPos) & b) != 0
यह भी काम करता है (.NET 4 में परीक्षण किया है):
void Main()
{
//0x05 = 101b
Console.WriteLine(IsBitSet(0x05, 0)); //True
Console.WriteLine(IsBitSet(0x05, 1)); //False
Console.WriteLine(IsBitSet(0x05, 2)); //True
}
bool IsBitSet(byte b, byte nPos){
return new BitArray(new[]{b})[nPos];
}
यदि आप थोड़ा झुकाव कर रहे हैं, तो आप शायद प्रदर्शन के बाद हो। इस तरह से ऐसा करने से अधिक ओओ महसूस हो सकता है, लेकिन यह perf को मारने जा रहा है। –
मैं आपको या कुछ भी कम करने वाला नहीं हूं लेकिन यदि आप प्रदर्शन की तलाश में हैं तो आपको यह नहीं करना चाहिए। – Gaspa79
एक 16-बिट शब्द में बिट्स की जाँच करने के लिए:
Int16 WordVal = 16;
for (int i = 0; i < 15; i++)
{
bitVal = (short) ((WordVal >> i) & 0x1);
sL = String.Format("Bit #{0:d} = {1:d}", i, bitVal);
Console.WriteLine(sL);
}
x == (x | Math.Pow(2, y));
int x = 5;
x == (x | Math.Pow(2, 0) //Bit 0 is ON;
x == (x | Math.Pow(2, 1) //Bit 1 is OFF;
x == (x | Math.Pow(2, 2) //Bit 2 is ON;
एसओ पर आमतौर पर आपके समाधान की व्याख्या करने के लिए यह एक अच्छा अभ्यास है, और क्यों। – ForceMagic
ओएमजी, चलिए इस सवाल को अलग करते हैं कि क्या संकलक उन सभी गणित को सटीक कर देगा। आपके लिए, लेकिन क्यों नहीं ((x और Math.Pow)! = 0) क्यों? यह स्पष्ट है और कुछ नैनोसेकंड भी बचा सकता है। – Konstantin
पर Mario Fernandez's answer आधार पर, मैंने सोचा क्यों डेटाप्रकार तक ही सीमित नहीं एक आसान विस्तार पद्धति के रूप में मेरी पिटारे में यह नहीं है, इसलिए मुझे आशा है कि यह इसे यहाँ साझा करने के लिए ठीक है:
/// <summary>
/// Returns whether the bit at the specified position is set.
/// </summary>
/// <typeparam name="T">Any integer type.</typeparam>
/// <param name="t">The value to check.</param>
/// <param name="pos">
/// The position of the bit to check, 0 refers to the least significant bit.
/// </param>
/// <returns>true if the specified bit is on, otherwise false.</returns>
public static bool IsBitSet<T>(this T t, int pos) where T : struct, IConvertible
{
var value = t.ToInt64(CultureInfo.CurrentCulture);
return (value & (1 << pos)) != 0;
}
मारियो एफ कोड के बराबर , लेकिन मुखौटा के बजाए बाइट को स्थानांतरित करना:
bool IsBitSet(byte b, int pos)
{
return ((b >> pos) & 1) != 0;
}
आपका अंतिम पाठ टेक्स्ट का कोई अर्थ नहीं है। – leppie
यह होमवर्क समस्या की तरह लगता है लेकिन लगता है कि इस कोड स्निपसेट से कितने लोग लाभ प्राप्त करते हैं .. – Manjoor
मैं इसे अपने काम पर उपयोग कर रहा हूं। वह संघर्ष वास्तविक है। – cambunctious