Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Üst <bit> bilgi aşağıdaki üye olmayan şablon işlevlerini içerir:
| Üye olmayan işlevler | Açıklama |
|---|---|
bit_cast |
Nesne gösterimini bir türden diğerine yeniden yorumla. |
bit_ceil |
Bir değerden büyük veya buna eşit olan iki değerin en küçük gücünü bulun. |
bit_floor |
Bir değerden büyük olmayan ikinin en büyük gücünü bulun. |
bit_width |
Bir değeri temsil etmek için gereken en küçük bit sayısını bulun. |
countl_zero |
En önemli bitten başlayarak, ardışık bit sayısını sıfır olarak ayarlayın. |
countl_one |
En önemli bitten başlayarak, ardışık bit sayısını bir olarak ayarlayın. |
countr_zero |
En az önemli bitten başlayarak, ardışık bit sayısını sıfır olarak ayarlayın. |
countr_one |
En az önemli bitten başlayarak, ardışık bit sayısını bir olarak ayarlayın. |
has_single_bit |
Bir değerin yalnızca bir bit olarak ayarlı olup olmadığını denetleyin. Bu, bir değerin ikinin gücü olup olmadığını test etmeyle aynıdır. |
popcount |
Bir olarak ayarlanan bit sayısını sayar. |
rotl |
Bit düzeyinde sol döndürmenin sonucunu hesapla. |
rotr |
Bit düzeyinde sağa döndürmenin sonucunu hesaplama. |
bit_cast
Türündeki bir nesneden türündeki From yeni bir nesneye bit deseni Tokopyalayın.
template <class To, class From>
[[nodiscard]] constexpr To bit_cast(const From& from) noexcept;
Parametreler
İşlem
Çıktının türü.
Başlangıç
Dönüştürülecek değerin türü.
kaynak
Dönüştürülecek değer.
Dönüş değeri
To türünün bir nesnesi.
sonuçtaki her bit, içinde from doldurma bitleri Toolmadığı sürece içindeki ilgili bitle eşleşir ve bu durumda sonuçtaki bu bitler belirtilmez.
Örnek
#include <bit>
#include <iostream>
int main()
{
float f = std::numeric_limits<float>::infinity();
int i = std::bit_cast<int>(f);
std::cout << "float f = " << std::hex << f
<< "\nstd::bit_cast<int>(f) = " << std::hex << i << '\n';
return 0;
}
float f = inf
std::bit_cast<int>(f) = 7f800000
Açıklamalar
Düşük düzeyli kodun genellikle bir türe ait bir nesneyi başka bir tür olarak yorumlaması gerekir. Yeniden yorumlanmış nesne özgün ile aynı bit gösterimine sahiptir, ancak farklı bir türdür.
bu dönüştürmeleri yapmak için , veya memcpy()bit_cast() kullanmak reinterpret_castyerine daha iyi bir yoldur. Daha iyi çünkü:
bit_cast()dirconstexprbit_cast()türlerin önemsiz olarak kopyalanabilir ve aynı boyutta olmasını gerektirir. Bu, vememcpykullanarakreinterpret_castkarşılaşabileceğiniz olası sorunları önler çünkü yanlışlıkla ve yanlış şekilde, önemsiz olarak kopyalanamayan türleri dönüştürmek için kullanılabilirler. Ayrıca,memcpy()aynı boyutta olmayan türler arasında yanlışlıkla kopyalama yapmak için de kullanılabilir. Örneğin, imzalanmamış bir int'e (4 bayt) çift (8 bayt) veya tersi.
Bu aşırı yükleme yalnızca aşağıdaki durumlarda aşırı yükleme çözümüne katılır:
sizeof(To) == sizeof(From)ToveFromis_trivially_copyable.
Bu işlev şablonu yalnızca constexpr ve yalnızca To, Fromise ve alt nesne türleri şöyledir:
- Birleşim veya işaretçi türü değil
- Üye türü işaretçisi değil
- Geçici olmayan niteleme
- Başvuru türü olan statik olmayan veri üyesi yok
bit_ceil
Bir değerden büyük veya buna eşit olan iki değerin en küçük gücünü bulun. Örneğin, verilen 3, döndürür 4.
template<class T>
[[nodiscard]] constexpr T bit_ceil(T value);
Parametreler
value
Test için işaretsiz tamsayı değeri.
Dönüş değeri
değerinden büyük veya buna eşit valueolan iki küçük güç.
Örnek
#include <bit>
#include <bitset>
#include <iostream>
int main()
{
for (auto i = 0u; i < 6u; ++i) // bit_ceil() takes an unsigned integer type
{
auto nextClosestPowerOf2 = std::bit_ceil(i);
std::cout << "\nbit_ceil(0b" << std::bitset<4>(i) << ") = "
<< "0b" << std::bitset<4>(nextClosestPowerOf2);
}
return 0;
}
bit_ceil(0b0000) = 0b0001
bit_ceil(0b0001) = 0b0001
bit_ceil(0b0010) = 0b0010
bit_ceil(0b0011) = 0b0100
bit_ceil(0b0100) = 0b0100
bit_ceil(0b0101) = 0b1000
Açıklamalar
Bu şablon işlevi yalnızca işaretsiz bir tamsayı türündeyse T aşırı yükleme çözümlemeye katılır. Örneğin: unsigned int, unsigned long, unsigned short, unsigned char, vb.
bit_floor
Bir değerden büyük olmayan ikinin en büyük gücünü bulun. Örneğin, verilen 5, döndürür 4.
template< class T >
[[nodiscard]] constexpr T bit_floor(T value) noexcept;
Parametreler
value
Test için işaretsiz tamsayı değeri.
Dönüş değeri
değerinden büyük olmayan en büyük valueiki güç.
Sıfır ise value sıfır döndürür.
Örnek
#include <bit>
#include <bitset>
#include <iostream>
int main()
{
for (auto i = 0u; i < 6u; ++i) // bit_floor() takes an unsigned integer type
{
auto previousPowerOf2 = std::bit_floor(i);
std::cout << "\nbit_floor(0b" << std::bitset<4>(i) << ") = 0b"
<< std::bitset<4>(previousPowerOf2);
}
return 0;
}
bit_floor(0b0000) = 0b0000
bit_floor(0b0001) = 0b0001
bit_floor(0b0010) = 0b0010
bit_floor(0b0011) = 0b0010
bit_floor(0b0100) = 0b0100
bit_floor(0b0101) = 0b0100
Açıklamalar
Bu şablon işlevi yalnızca işaretsiz bir tamsayı türündeyse T aşırı yükleme çözümlemeye katılır. Örneğin: unsigned int, unsigned long, unsigned short, unsigned char, vb.
bit_width
Bir değeri temsil etmek için gereken en küçük bit sayısını bulun.
Örneğin, verilen 5 (0b101), 5 değerini ifade etmek için 3 ikili bit gerektiğinden 3 döndürür.
template<class T>
[[nodiscard]] constexpr T bit_width(T value) noexcept;
Parametreler
value
Test için işaretsiz tamsayı değeri.
Dönüş değeri
öğesini temsil valueetmek için gereken bit sayısı.
Sıfır ise value sıfır döndürür.
Örnek
#include <bit>
#include <iostream>
int main()
{
for (unsigned i=0u; i <= 8u; ++i)
{
std::cout << "\nbit_width(" << i << ") = "
<< std::bit_width(i);
}
return 0;
}
bit_width(0) = 0
bit_width(1) = 1
bit_width(2) = 2
bit_width(3) = 2
bit_width(4) = 3
bit_width(5) = 3
bit_width(6) = 3
bit_width(7) = 3
bit_width(8) = 4
Açıklamalar
Bu şablon işlevi yalnızca işaretsiz bir tamsayı türündeyse T aşırı yükleme çözümlemeye katılır. Örneğin: unsigned int, unsigned long, unsigned short, unsigned char, vb.
countl_zero
En önemli bitten başlayarak, ardışık bit sayısını sıfır olarak ayarlayın.
template<class T>
[[nodiscard]] constexpr int countl_zero(T value) noexcept;
Parametreler
value
Test için işaretsiz tamsayı değeri.
Dönüş değeri
En önemli bitten başlayarak ardışık sıfır bit sayısı.
Sıfır ise value , türündeki valuebit sayısıdır.
Örnek
#include <bit>
#include <bitset>
#include <iostream>
int main()
{
for (unsigned char result = 0, i = 0; i < 9; i++)
{
std::cout << "\ncountl_zero(0b" << std::bitset<8>(result) << ") = " << std::countl_zero(result);
result = result == 0 ? 1 : result * 2;
}
return 0;
}
countl_zero(0b00000000) = 8
countl_zero(0b00000001) = 7
countl_zero(0b00000010) = 6
countl_zero(0b00000100) = 5
countl_zero(0b00001000) = 4
countl_zero(0b00010000) = 3
countl_zero(0b00100000) = 2
countl_zero(0b01000000) = 1
countl_zero(0b10000000) = 0
Açıklamalar
Bu şablon işlevi yalnızca işaretsiz bir tamsayı türündeyse T aşırı yükleme çözümlemeye katılır. Örneğin: unsigned int, unsigned long, unsigned short, unsigned char, vb.
countl_one
En önemli bitten başlayarak, ardışık bit sayısını bir olarak ayarlayın.
template<class T>
[[nodiscard]] constexpr int countl_one(T value) noexcept;
Parametreler
value
Test için işaretsiz tamsayı değeri.
Dönüş değeri
En önemli bitten başlayarak ardışık bit sayısı bir olarak ayarlanır.
Örnek
#include <bit>
#include <bitset>
#include <iostream>
int main()
{
unsigned char value = 0;
for (unsigned char bit = 128; bit > 0; bit /= 2)
{
value |= bit;
std::cout << "\ncountl_one(0b" << std::bitset<8>(value) << ") = "
<< std::countl_one(value);
}
return 0;
}
countl_one(0b10000000) = 1
countl_one(0b11000000) = 2
countl_one(0b11100000) = 3
countl_one(0b11110000) = 4
countl_one(0b11111000) = 5
countl_one(0b11111100) = 6
countl_one(0b11111110) = 7
countl_one(0b11111111) = 8
Açıklamalar
Bu şablon işlevi yalnızca işaretsiz bir tamsayı türündeyse T aşırı yükleme çözümlemeye katılır. Örneğin: unsigned int, unsigned long, unsigned short, unsigned char, vb.
countr_zero
En az önemli bitten başlayarak, ardışık bit sayısını sıfır olarak ayarlayın.
template<class T>
[[nodiscard]] constexpr int countr_zero(T value) noexcept;
Parametreler
value
Test için işaretsiz tamsayı değeri.
Dönüş değeri
En az önemli bitten başlayarak ardışık sıfır bit sayısı.
Sıfır ise value , türündeki valuebit sayısıdır.
Örnek
#include <bit>
#include <bitset>
#include <iostream>
int main()
{
for (unsigned char result = 0, i = 0; i < 9; i++)
{
std::cout << "\ncountr_zero(0b" << std::bitset<8>(result) << ") = "
<< std::countr_zero(result);
result = result == 0 ? 1 : result * 2;
}
return 0;
}
countr_zero(0b00000000) = 8
countr_zero(0b00000001) = 0
countr_zero(0b00000010) = 1
countr_zero(0b00000100) = 2
countr_zero(0b00001000) = 3
countr_zero(0b00010000) = 4
countr_zero(0b00100000) = 5
countr_zero(0b01000000) = 6
countr_zero(0b10000000) = 7
Açıklamalar
Bu şablon işlevi yalnızca işaretsiz bir tamsayı türündeyse T aşırı yükleme çözümlemeye katılır. Örneğin: unsigned int, unsigned long, unsigned short, unsigned char, vb.
countr_one
En az önemli bitten başlayarak, ardışık bit sayısını bir olarak ayarlayın.
template<class T>
[[nodiscard]] constexpr int countr_one(T value) noexcept;
Parametreler
value
Test için işaretsiz tamsayı değeri.
Dönüş değeri
En az önemli bitten başlayarak ardışık bit sayısı bir olarak ayarlanır.
Örnek
#include <bit>
#include <bitset>
#include <iostream>
int main()
{
unsigned char value = 0;
for (int bit = 1; bit <= 128; bit *= 2)
{
value |= bit;
std::cout << "\ncountr_one(0b" << std::bitset<8>(value) << ") = "
<< std::countr_one(value);
}
return 0;
}
countr_one(0b00000001) = 1
countr_one(0b00000011) = 2
countr_one(0b00000111) = 3
countr_one(0b00001111) = 4
countr_one(0b00011111) = 5
countr_one(0b00111111) = 6
countr_one(0b01111111) = 7
countr_one(0b11111111) = 8
Açıklamalar
Bu şablon işlevi yalnızca işaretsiz bir tamsayı türündeyse T aşırı yükleme çözümlemeye katılır. Örneğin: unsigned int, unsigned long, unsigned short, unsigned char, vb.
has_single_bit
Bir değerin yalnızca bir bit ayarlı olup olmadığını denetleyin. Bu, bir değerin ikinin gücü olup olmadığını test etmeyle aynıdır.
template <class T>
[[nodiscard]] constexpr bool has_single_bit(T value) noexcept;
Parametreler
value
Test için işaretsiz tamsayı değeri.
Dönüş değeri
true yalnızca bir bit kümesi varsa value , bu value da ikinin gücü olduğu anlamına gelir. Tersi durumda false.
Örnek
#include <bit>
#include <bitset>
#include <iostream>
#include <iomanip>
int main()
{
for (auto i = 0u; i < 10u; ++i)
{
std::cout << "has_single_bit(0b" << std::bitset<4>(i) << ") = "
<< std::boolalpha << std::has_single_bit(i) << '\n';
}
return 0;
}
has_single_bit(0b0000) = false
has_single_bit(0b0001) = true
has_single_bit(0b0010) = true
has_single_bit(0b0011) = false
has_single_bit(0b0100) = true
has_single_bit(0b0101) = false
has_single_bit(0b0110) = false
has_single_bit(0b0111) = false
has_single_bit(0b1000) = true
has_single_bit(0b1001) = false
Açıklamalar
Bu şablon işlevi yalnızca işaretsiz bir tamsayı türündeyse T aşırı yükleme çözümlemeye katılır. Örneğin: unsigned int, unsigned long, unsigned short, unsigned char, vb.
popcount
İşaretsiz bir tamsayı değerinde bire ayarlanmış bit sayısını sayar.
template<class T>
[[nodiscard]] constexpr int popcount(T value) noexcept;
Parametreler
value
Test için işaretsiz tamsayı değeri.
Dönüş değeri
içindeki bit sayısı bir valueolarak ayarlanır.
Örnek
#include <bit>
#include <bitset>
#include <iostream>
int main()
{
for (unsigned char value = 0; value < 16; value++)
{
std::cout << "\npopcount(0b" << std::bitset<4>(value) << ") = "
<< std::popcount(value);
}
return 0;
}
popcount(0b0000) = 0
popcount(0b0001) = 1
popcount(0b0010) = 1
popcount(0b0011) = 2
popcount(0b0100) = 1
popcount(0b0101) = 2
popcount(0b0110) = 2
popcount(0b0111) = 3
popcount(0b1000) = 1
popcount(0b1001) = 2
popcount(0b1010) = 2
popcount(0b1011) = 3
popcount(0b1100) = 2
popcount(0b1101) = 3
popcount(0b1110) = 3
popcount(0b1111) = 4
Açıklamalar
Bu şablon işlevi yalnızca işaretsiz bir tamsayı türündeyse T aşırı yükleme çözümlemeye katılır. Örneğin: unsigned int, unsigned long, unsigned short, unsigned char, vb.
rotl
İşaretsiz bir tamsayı değerinin bitlerini belirtilen sayıda sola döndürür. En soldaki bitten "çıkan" bitler en sağdaki bite döndürülür.
template<class T>
[[nodiscard]] constexpr T rotl(T value, int s) noexcept;
Parametreler
value
Döndürülecek işaretsiz tamsayı değeri.
s
Gerçekleştirilecek sol döndürme sayısı.
Dönüş değeri
Sola dönmenin value sonucu, s zaman.
Sıfır ise s , döndürür value.
Negatifse s , yapar rotr(value, -s). En sağdaki bitten 'düşen' bitler en soldaki bite döndürülür.
Örnek
#include <bit>
#include <bitset>
#include <iostream>
int main()
{
unsigned char bits = 1;
for (int i = 0; i < 8; ++i)
{
std::cout << "rotl(0b" << std::bitset<8>(bits) << ", 1) = ";
bits = std::rotl(bits, 1);
std::cout << "0b" << std::bitset<8>(bits) << '\n';
}
std::cout << "rotl(0b" << std::bitset<8>(bits) << ",-1) = ";
bits = std::rotl(bits, -1);
std::cout << "0b" << std::bitset<8>(bits);
return 0;
}
rotl(0b00000001, 1) = 0b00000010
rotl(0b00000010, 1) = 0b00000100
rotl(0b00000100, 1) = 0b00001000
rotl(0b00001000, 1) = 0b00010000
rotl(0b00010000, 1) = 0b00100000
rotl(0b00100000, 1) = 0b01000000
rotl(0b01000000, 1) = 0b10000000
rotl(0b10000000, 1) = 0b00000001
rotl(0b00000001,-1) = 0b10000000
Açıklamalar
Bu şablon işlevi yalnızca işaretsiz bir tamsayı türündeyse T aşırı yükleme çözümlemeye katılır. Örneğin: unsigned int, unsigned long, unsigned short, unsigned char, vb.
rotr
Bitleri value belirtilen sayıda sağa döndürür. En sağdaki bitten 'düşen' bitler en soldaki bite geri döndürülür.
template<class T>
[[nodiscard]] constexpr T rotr(T value, int s) noexcept;
Parametreler
value
Döndürülecek işaretsiz tamsayı değeri.
s
Gerçekleştirilecek sağ döndürme sayısı.
Dönüş değeri
Sağa dönmenin value sonucu, s zaman.
Sıfır ise s , döndürür value.
Negatifse s , yapar rotl(value, -s). En soldaki bitten 'düşen' bitler en sağdaki bite geri döndürülür.
Örnek
#include <bit>
#include <bitset>
#include <iostream>
int main()
{
unsigned char bits = 128;
for (int i = 0; i < 8; ++i)
{
std::cout << "rotr(0b" << std::bitset<8>(bits) << ", 1) = ";
bits = std::rotr(bits, 1);
std::cout << "0b" << std::bitset<8>(bits) << '\n';
}
std::cout << "rotr(0b" << std::bitset<8>(bits) << ",-1) = ";
bits = std::rotr(bits, -1);
std::cout << "0b" << std::bitset<8>(bits);
return 0;
}
rotr(0b10000000, 1) = 0b01000000
rotr(0b01000000, 1) = 0b00100000
rotr(0b00100000, 1) = 0b00010000
rotr(0b00010000, 1) = 0b00001000
rotr(0b00001000, 1) = 0b00000100
rotr(0b00000100, 1) = 0b00000010
rotr(0b00000010, 1) = 0b00000001
rotr(0b00000001, 1) = 0b10000000
rotr(0b10000000,-1) = 0b00000001
Açıklamalar
Bu şablon işlevi yalnızca işaretsiz bir tamsayı türündeyse T aşırı yükleme çözümlemeye katılır. Örneğin: unsigned int, unsigned long, unsigned short, unsigned char, vb.
Gereksinimler
Üstbilgi: <bit>
Ad alanı: std
/std:c++20 veya üzeri gereklidir.