Xin chào và chào mừng. Hãy nói về toán tử bitwise.
Chúng tôi đã chỉ cho bạn một chút sơ lược về điều này trong bài giảng trước khi chúng ta nói về toán tử
gán vì toán tử gán có tất cả các phép gán ghép nơi bạn có thể
thực hiện một phép toán như phép cộng và sau đó cũng có thể gán.
Bạn có thể làm những điều tương tự với các toán tử kiểu này.
Nhưng chúng ta hãy đi vào chi tiết hơn và cho bạn biết chính xác chúng là gì.
Vì vậy, c cung cấp toán tử logic
bitwise và toán tử shift. Những điều khoản đó có thể hoàn toàn không có cơ sở.
Chúng trông giống như các toán tử logic, nhưng chúng khá khác nhau. Họ không thực hiện bất kỳ loại
đánh giá Boolean nào. Họ không đánh giá đúng hay sai.
Chúng trông giống như ký hiệu và ký hiệu và, 2 ors, nhưng
chúng không thực hiện bất kỳ loại đánh giá Boolean nào.
Những gì họ đang làm là họ đang hoạt động trên các bit, bên trong các giá trị số nguyên.
Và vì vậy bạn có thể tự hỏi mình tại sao bạn lại muốn làm điều này? Chà, nó không được sử
dụng trong hầu hết các chương trình. Đó là một kỹ thuật tiên tiến hơn.
Mặc dù đây là lớp học dành cho người mới bắt đầu. Chúng là một phần của toán tử, và toán tử là một khái niệm mới bắt đầu.
Vì vậy, tôi sẽ giải quyết chúng, nhưng chúng ta sẽ không nhất thiết phải tập trung vào chúng.
Tôi sẽ cung cấp cho bạn một số ví dụ, chỉ cho bạn cách bạn có thể sử dụng chúng.
Nhưng bạn sẽ không trở thành chuyên gia trong lĩnh vực này sau bài giảng này.
Nhưng cách chúng hữu ích và tại sao bạn thực sự muốn sử dụng chúng là vì bạn
có thể lưu trữ khá nhiều dữ liệu.
Vì vậy, có các toán hạng theo chiều bit được gọi là và, ký hiệu và và theo chiều dọc bit
hoặc là một hoặc chỉ là một thanh song song.
Cố gắng không để những điều này nhầm lẫn một lần nữa với các toán tử logic.
Toán tử logic có 2 trong số chúng, ký hiệu và ký hiệu và, là một và.
Các toán tử bitwise chỉ có một. Vì vậy, chỉ một dấu và hoặc chỉ hoặc.
Và vì vậy những gì họ sẽ làm là họ sẽ kiểm tra và họ sẽ đặt các bit riêng
lẻ bên trong một biến số nguyên. Một chút là gì?
Chúng tôi biết một chút là một cách để đo lường dữ liệu.
Nhưng một bit về cơ bản chỉ là một giá trị 0 hoặc 1.
Và 8 trong số đó tạo nên một byte. Vì vậy, một bit là một 0 hoặc 1.
Và những gì bạn có thể làm là một số nguyên,
hãy nhớ rằng, tùy thuộc vào hệ thống bạn đang chạy, nó có thể là 8 byte.
Và vì vậy bạn có thể bật và tắt từng bit.
Và khi tôi nói bật hoặc tắt, tôi nói rằng bạn có thể đặt chúng bằng 1 hoặc 0.
Và sau đó bạn có thể sử dụng những bit đó để cho bạn biết điều gì đó.
Vì vậy, bạn có thể lưu trữ nhiều dữ liệu bằng cách có các bit đại diện cho một số loại dữ liệu.
Đó là lý do tại sao một trong những lý do tại sao máy
tính sử dụng các bit ở 1 và 0 và số nhị phân để thực hiện các hoạt động vì bạn có thể lưu
trữ rất nhiều dữ liệu. Bây giờ chính xác
điều này có nghĩa là gì, đây là một ví dụ. Bạn có thể sử dụng một biến số nguyên duy nhất.
Một lần nữa, một số nguyên là một số, một số nguyên đại diện cho 4
đến 8 byte tùy thuộc vào hệ thống bạn đang chạy.
Điều đó có nghĩa là nếu có 4 byte nghĩa là có 32 bit.
Có 32 giá trị 0 hoặc 1.
Vì vậy, bạn có thể sử dụng tất cả các bit đó để biểu diễn một cái gì đó.
Vì vậy, ví dụ, nếu bạn muốn lưu trữ các ký tự riêng lẻ của một người,
bạn chỉ có thể có 1 bit, cho bạn
biết người đó là nam hay nữ bằng cách nói 1 bằng nam 0 bằng nữ.
Bạn chỉ cần bật hoặc tắt nó.
Sau đó, bạn có thể sử dụng 3 bit để chỉ
định liệu người đó có thể nói tiếng Pháp, Đức hay Ý hay không.
Vì vậy, bit 1 có thể đại diện cho tiếng Pháp. Nếu nó không phải là 1 0, thì
điều đó có nghĩa là họ không nói được tiếng Pháp.
Nếu tiếng Đức là 0 có nghĩa là họ không nói được tiếng Đức.
Nếu là 1, có nghĩa là họ nói tiếng Đức. Vì vậy, bằng cách tắt và bật các bit này,
đặt chúng từ 1 thành 0, bạn có thể biểu diễn rất nhiều dữ liệu.
Bạn có thể có một chút khác để ghi lại liệu mức lương của người đó là 50.000 hay hơn.
Nếu nó là 1, đó là sự thật, có, nó là. 0 sai.
Vì vậy, về cơ bản chúng tôi chỉ xác định ở đây.
Nó thực sự nói là 4, nhưng chúng tôi thực sự chỉ định 5 bit
dữ liệu, chỉ 5 trong số liệu chúng tôi có 32 hay không
hoặc nếu chúng tôi có 64 bit, nhưng chúng tôi chỉ sử dụng 5
và chúng tôi có thể biểu thị một người là nữ hay nam. , cho dù họ có nói
được tiếng Pháp, tiếng Đức hay tiếng Ý hay cả 3 hay một hoặc khác.
Và liệu họ có kiếm được hơn 50.000 đô la hay không.
Chúng tôi có thể biểu diễn tất cả dữ liệu đó trong các bit của chúng tôi.
Và đây là nơi mà các toán tử bitwise có ích.
Bây giờ chúng ta đã biết làm thế nào chúng ta có thể sử dụng các bit để lưu
trữ nhiều dữ liệu khác nhau. Hãy nói về những số nhị phân.
Chúng ta biết rằng một số nhị phân chỉ là một số bao gồm các số 1 và số 0.
Và đó là lý do tại sao nó có lợi khi sử dụng. Toán tử bit trong một số nguyên, số có
thể có độ dài bất kỳ.
Sau đây là các ví dụ về số nhị phân, chỉ là 0 và 1.
Vì vậy, bạn đã thấy điều này 0 1 0 1 0 1 1 0 1 0 1 0.
Và hãy nhớ rằng một byte là 8 bit.
Một số nguyên thường là 4 byte trên hầu hết các nền tảng.
Nó phụ thuộc vào kiến trúc, nhưng chủ yếu là 32 bit.
Vì vậy, bạn có 32 giá trị mà bạn có thể lưu trữ với 1s và 0s để chỉ ra bật hoặc tắt.
Số nhị phân, một lần nữa mỗi số nhị phân đều có giá trị thập phân
tương ứng, vì vậy bạn cần hiểu cách chuyển từ nhị phân sang thập phân.
Các ví dụ ở đây 1 bằng 1, 1 0 bằng 2, 1 1 bằng 3,
đây là những chuyển đổi đơn giản.
Một lần nữa, chúng thường có nhiều bit hơn, 1 0 1 0 1 1 1.
Cách mà bạn muốn chuyển đổi số nhị phân thành số thập
phân là bạn muốn tìm từng vị trí
trong byte với bit tương ứng với bit và sau đó sử dụng lũy thừa của 2.
Vì vậy, đối với mỗi chữ số, bạn nhân chữ số với giá trị vị trí
của nó bằng cách sử dụng lũy thừa của 2. Và sau đó bạn cộng toàn bộ dự án để có kết quả cuối cùng.
Vì vậy, các giá trị vị trí và một số nhị phân là lũy thừa của 2.
Vì vậy, vị trí đầu tiên sẽ là giá trị 2
0, nói cách khác, sẽ là 1.
Và sau đó vị trí thứ hai sẽ là giá trị của 2 đến lũy thừa đầu tiên
là 2, 2 đến 2 sẽ là 4, 2 đến 3 sẽ là
8, 2 đến 4 sẽ là 16. Và bạn cứ làm
đi làm lại điều đó. Và vì vậy sẽ dễ hiểu hơn nếu bạn thấy một ví dụ hay.
Và vì vậy ở đây chúng ta có một số nhị phân 0 1 1 0 1 0 0 1.
Tương đương với số thập phân của nó là 105.
Cách bạn chuyển đổi là bạn bắt đầu ở phía bên tay phải cho mỗi
bit và bạn nhân với lũy thừa của 2 tùy thuộc vào nếu bit là 0 1.
Vì vậy, nếu chúng ta bắt đầu tất cả theo cách bên phải, chúng ta có 1.
Vì vậy, chúng tôi nói 1 lần 1 và chúng tôi giữ nguyên số 1. Khi đó vị trí tiếp theo 1,
vị trí thứ hai là 0 lần 2 0. Sau đó 0 lần 4,
1 lần 8, 0 lần 16,1 lần 32, 1
lần 64 và 0 lần 28.
Và bạn cộng tất cả những thứ đó lại với nhau và bạn nhận được kết quả là 105.
Đó là 1 cách để chuyển đổi. Bạn thực sự có thể chuyển đổi nó
từ trái sang phải bằng cách nhân với 2 và sau đó thêm 1 hoặc
thêm 0 tùy thuộc vào bit tiếp theo là gì. Vì vậy, ví dụ, bạn cũng
có thể nếu bạn đi từ trái sang phải,
bạn bắt đầu bằng 1 vì 0 không quan trọng.
Vì vậy, bit thứ hai đi từ trái sang phải, bạn có 1.
Bit thứ ba, bạn có 1 nhân 2 cộng với 1,
do đó bạn có 3.
Và một lần nữa, bạn nhân với 2 để bạn nói 3 nhân 2 cộng với 0 là 6.
6 nhân 2 cộng với 1, được 13.
13 lần 2 là 26.
26 nhân 2 là 52
nhân 2, là 104 cộng 1.
Vì vậy, một lần nữa nhân với 2 và sau đó cộng 1. Một ví dụ khác, một lần
nữa, từ phải sang trái thường dễ dàng hơn một chút.
Đây là 1 0 0 1 1 1 0 0.
Và điều đó chuyển đổi thành 156 bởi vì bạn nói lại 0 lần
1, 0 lần 2, 1 lần 4, 1 lần 8, 1 lần
16, v.v. và sau đó bạn cộng
tất cả chúng lại với nhau, đó là 4 8 12 16 28 cộng 128 là 156 .
Và một lần nữa, nếu bạn đi từ trái sang phải, bạn nhân với 2 thêm 1.
Vì vậy, chúng tôi bắt đầu cho 1. Nói 1
2 4 9, 4 nhân
2 cộng với 1, 9 nhân
với 2 là 18 cộng với 1 là
19 nhân 2, 38 cộng với 1 là 39 nhân
2 là 78 nhân 2 là 156.
Vì vậy, đây là một minh chứng nhanh chóng về cách bạn có thể
chuyển đổi từ nhị phân sang thập phân. Bây giờ chuyển đổi decibel thành nhị
phân, tôi thường chỉ sử dụng chuyển đổi trên web
nếu bạn thực sự quan tâm đến điều đó. Nhưng bạn có thể lấy các số nhị phân này và sau đó thực hiện
các toán tử theo bit. Vì vậy, chúng ta hãy xem xét các toán tử theo bit.
Vì vậy, các toán tử bitwise được tóm tắt ở đây. Và một lần nữa, một bảng đẹp khác mà tôi
có trên mạng, nhưng chúng trông giống với các toán tử logic. Nhưng một lần nữa, đừng nhầm lẫn chúng.
Vì vậy, ký hiệu và tự nó là một toán tử và nhị phân.
Và điều này đang làm là sao chép một chút kết quả nếu
nó tồn tại trong cả hai toán hạng. Vì vậy, nếu cả hai đều đúng, thì nó
sẽ sao chép một chút.
Vì vậy, nếu a và b bằng 12, bạn sẽ
có một biểu diễn nhị phân của 0 0 0 0 1 1 0 0.
Vì vậy, a và b
sẽ là số đó. Chúng ta sẽ đi qua một số ví dụ.
Một nhị phân hoặc sao chép một bit nếu nó tồn tại trong một trong hai toán hạng nên
a hoặc b sẽ sao chép một bit
nếu nó tồn tại trong một trong hai toán hạng. Vì vậy, nếu một trong
hai toán hạng bằng 1, nó sẽ sao chép một chút.
Và sau đó là xor nhị phân, đây là độc quyền hoặc.
Điều này sẽ sao chép bit nếu nó được đặt trong 1 toán hạng nhưng không phải cả hai.
Vì vậy, nếu bạn có một true, nhưng chỉ có 1 true
và bạn sử dụng củ cà rốt để biểu thị điều này trên bàn phím của mình,
thì nó sẽ sao chép một chút và nó sẽ nói rằng nó đúng,
phần bổ sung
cho các bit 1 nhị phân.
Vì vậy, một lần nữa, chúng tôi nhận được dữ liệu nhị phân ở đây vì chúng tôi đang nói về bit. Vì vậy, hy vọng, 1 của
bổ sung.
Nhà khai thác là một ngôi và có
tác dụng lật các bit, về cơ bản chỉ phủ định và tắt màn hình.
Vì vậy, một ví dụ ở đây là nếu bạn nói dấu ngã
a, bạn đang áp dụng toán tử bổ sung 1s.
Và nếu nó bằng âm 61, nó sẽ là 1 1 0 0 0 0 1.
Vì vậy, nếu bạn thực sự chuyển đổi số nhị
phân đó thành số thập phân là số âm và số
đầu tiên là dấu. Vì vậy, 1 cho bạn biết rằng đó là một dấu hiệu.
Và sau đó bạn nói 1 2 4 8 16 33 và sau đó
61, vì vậy đó là cách nó sẽ được biểu diễn.
Vì vậy, tôi sẽ đi qua các ví dụ cụ thể hơn về điều này.
Nhưng về cơ bản, nếu bạn có một số nhị phân, a ban đầu là một số nhị phân 0
0 1 1 1 1 0 0 là 60 và bạn cung
cấp phép lật về cơ bản thì nó sẽ
chuyển thành âm 61, là 1 1 0 0 0 0 0 0 0 0 0 1 1.
Vì vậy, đây là kết quả của các biến thực sự được thiết lập. Vì vậy, một lần nữa, tôi giả định
rằng a có một biểu diễn nhị phân nhất định và b có một biểu diễn nhị phân nhất định.
Vì vậy, nếu a bằng, một lần nữa, 60 và
b bằng 13, thì kết quả của việc cộng chúng với nhau theo
chiều dọc bit và sẽ là 0000 11 00, tức là 12.
Một lần nữa, tôi sẽ xem xét các ví dụ này nhưng điều này đang cố gắng cung
cấp một chút mô tả về các toán tử nhị phân khác nhau này.
Ký hiệu nhỏ hơn sẽ chuyển các bit sang trái.
Vì vậy, giá trị toán hạng bên trái được di chuyển sang trái bằng số bit được chỉ định bởi toán hạng trắng.
Vì vậy, nếu bạn làm điều gì đó
như nhỏ hơn
2 và a thực sự bằng bạn biết một số
nhị phân nào đó, ví dụ: 0 0 1 1 1 1 0 0, bạn sẽ
chuyển các byte đi 2.
Vì vậy, bạn sẽ loại bỏ các số 0 và nó sẽ trở thành 1 1 1 1, và các số 0 đó sẽ đi đến cuối cùng.
Và tương tự với người điều khiển ca bên phải. Bạn chỉ cần chuyển chúng sang bên phải chứ không phải bên trái.
Ở đây bạn sử dụng ký hiệu lớn hơn.
Và vì vậy tôi sẽ xem xét những điều này sau một giây.
Điều quan trọng khác cần hiểu với các toán tử bitwise là cách đánh
giá các giá trị a và b này. Vậy số 1 và số 1
đánh giá như thế nào đối với số 1, nếu đó là
một ký hiệu và. Nếu đó là một hoặc 1
và 1 cũng cho kết quả là 1.
Nhưng số 1 và 1 và số 0 nếu bạn đang sử dụng ký hiệu và thực hiện
ký hiệu và, điều đó cho kết quả là 0 false. Vì vậy, tôi chỉ muốn cung cấp một bảng sự
thật nhỏ ở đây cho bạn thấy các giá trị khi bạn thực
hiện nó, bạn sử dụng một và một hoặc một độc quyền hoặc.
Vì vậy, ở đây nếu bạn có p0 và q0, có nghĩa là cả hai đều
sai và bạn áp dụng dấu và, nó
sẽ sai vì cả hai đều phải đúng thì điều đó mới đúng.
Và đó là những gì bạn thấy ở hàng 3.
Cả hai đều đúng thì p và q sẽ đánh giá là 1, đúng.
Nếu cả hai đều không đúng, thì nó luôn sai.
P hoặc q chỉ cần 1 trong số chúng là đúng.
Vì vậy, đó là lý do tại sao bạn thấy hàng 1 và hàng 2 bằng 1 và hàng 3 bằng 1.
Lần duy nhất nó sai là khi cả hai đều sai.
Và sau đó độc quyền hoặc ít nhất 1 trong số đó
là đúng, và chỉ 1.
Vì vậy, nếu p sai và q đúng, nó sẽ trả về true.
Và nếu p đúng và q sai, nó sẽ trả về 1.
Vì vậy, điều này cho bạn ý tưởng về cách nó được đánh giá.
Một lần nữa, rất nhiều thứ về toán học, nhưng khi chúng ta nói về các chữ số nhị phân, đó là những gì chúng ta đang nói đến.
Vì vậy, chúng ta hãy xem xét một số ví dụ cụ thể và các khối mã. Hy vọng rằng, điều này sẽ giúp một chút.
Vì vậy, đây là chức năng của chúng tôi. Tôi sẽ tạo thêm một vài biến nữa.
Tôi sẽ đảm bảo rằng chúng chưa được ký mặc
dù đó là theo mặc định. Vì vậy, nếu tôi nói int a unsigned và
gán nó cho 60, thì điều đó thực sự sẽ được biểu diễn dưới dạng nhị phân là
0 0 1 1 và sau đó là 11 00.
Nếu tôi tạo một biến không dấu khác và tôi nói int
b và tôi gán giá trị đó là
13, thì biến đó sẽ thực sự được biểu diễn dưới dạng nhị phân
0 0 00 1 1 0 1. Bạn có thể thực hiện các chuyển đổi ở đó.
Nhưng điều tôi muốn chứng minh ở đây là khi bạn thiết lập các số nhị phân
này, bạn có thể tắt các bit bằng cách sử dụng các toán hạng bitwise khác nhau.
Vì vậy, bây giờ tôi sẽ chỉ tạo một kết quả int và tôi sẽ
nói rằng nó sẽ bằng 0.
E sẽ giữ kết quả của phép toán bit.
hoạt động. Bây giờ nếu tôi nói c bằng
a và tôi áp dụng toán hạng bitwise và a và b, bây
giờ điều cần làm là nếu a bằng 1 và b bằng 1, các
bit đó sẽ được bật. Vì vậy, những gì bạn sẽ mong đợi kết quả của điều này v.
Vâng, bạn nhìn vào bit đầu tiên của a và bạn nhìn vào bit đầu tiên của b
và cả hai đều là 0.
Vì vậy, kết quả sẽ là 0 vì
nếu bạn làm đúng ở câu a và câu b, thì cả hai đều phải đúng để là 1.
Vì vậy, giá trị tiếp theo cũng sẽ là 0. Cái tiếp theo là 1 và 0, bit thứ ba.
Vì vậy, nó vẫn là 0, 1 và 0 vẫn là 0. Và bây giờ chúng ta có 1 và 1.
Vì vậy, bây giờ chúng tôi cuối cùng có một sự thật. Chúng tôi có 1 và 1 khác. Chúng tôi có một sự thật.
Và sau đó 0 và 0 sẽ là 0 và sau đó 0 và 1
sẽ là 0.
Vì vậy, kết quả nếu tôi cố gắng in ra c, nó sẽ in ra
giá trị ở định dạng thập phân. Nếu tôi làm điều gì đó
như vậy, nó sẽ in ra số tương đương thập phân của số nhị
phân đó, tương đương với 0 0 0 0.
Và đây là tất cả chuyển đổi từ nhị phân sang thập phân, vì vậy bạn cần hiểu
cách làm điều đó để hiểu ví dụ này. Nhưng 0 0 0 0 1
1 0 0 thực sự là 1 3 7, giá trị
thực sự là 12, 1 3 6 12.
Vì vậy, điều này sẽ in ra
mười hai nếu tôi in
ra c hoặc kết quả sẽ tốt hơn.
Vì vậy, nếu tôi chạy điều này, bạn sẽ thấy rằng giá trị là 12.
Nó thực sự đã tắt và bật tất cả các bit dựa trên so sánh ký hiệu và.
Vì vậy, bây giờ
tôi nói chạy, chúng tôi thấy rằng giá trị ở d12 bởi vì nó
đang tắt và trên các bit và nó sẽ thực
sự được biểu diễn dưới dạng 0 0 0 1 1 0
0 là giá trị 12 vì chúng tôi đang in ra một số thập phân .
Nếu tôi đã thay đổi điều này và bây giờ
tôi muốn thực hiện một hoặc và tôi vẫn đang làm hoặc và hoặc
hoặc nhớ là
thanh song song ngay bên cạnh enter, bây giờ tôi sẽ chỉ bật
bit nếu 1 là thật. Vì vậy, 00, cả
hai đều sai. Một lần nữa, tôi đang so sánh ở đây.
Tôi đang so sánh các bit này cho 16 và 13.
16 được biểu diễn dưới dạng nhị phân 0 0 1 1 1 1 0 0.
13 được biểu diễn dưới dạng nhị phân 0 0 0 0 1 1 0 là 1.
Mỗi một trong những con số đó đại diện cho một bit.
Vì vậy, bit đầu tiên trong 60 là 0, bit đầu tiên trong 13 là 0.
Và nếu tôi sắp xếp chúng cùng nhau, 0 và 0, tôi vẫn sẽ nhận được 0. Vì vậy, đó là kết quả đầu tiên của bit đầu tiên.
Bit thứ hai 00 một lần nữa. Bit thứ ba là 1 cho 60
và 0 cho 13.
Bây giờ tất cả điều đó có nghĩa là tôi phải có 1 đúng để đó sẽ là 1.
Tương tự với bit số 4 và 16, 13. Vì vậy, bây giờ tôi có một một lần nữa.
Và sau đó là 1 và 1, cả hai đều đúng. Vì vậy, một lần nữa, tất cả
những gì tôi cần là 1 đúng, 1 khác.
Cả hai đều sai nên điều đó sẽ không đúng. 0, nhớ là không đúng,
1 là đúng và 0 11. Vì vậy, bây giờ tôi có 0 0 1 1 1 1 0 1.
Và giá trị của nó ở dạng thập phân nếu tôi in
nó ra một lần nữa, bạn phải hiểu cách chuyển đổi
nhị phân sang thập phân nhưng về cơ bản nó sẽ là
1 3 7 15 30 61. Vì vậy, điều này sẽ được in ra 61.
Kết thúc chương trình này và xây dựng lại
nó, và chúng ta sẽ thấy giá trị là 61.
Vì vậy, đó là toán tử bitwise. Và một lần nữa, đó là
một loại chương trình nâng cao hơn, nhưng đó là một cách
hay để biểu diễn nhiều dữ liệu bằng cách sử dụng ký hiệu và v.v., về cơ
bản bằng cách bật và tắt các bit. Vì vậy, bạn có thể chơi
xung quanh với điều này. Bạn có thể làm độc quyền hoặc đó là cà rốt.
Củ cà rốt nằm trên số 6, số 6 trên bàn phím.
Bạn sẽ thấy một kết quả khác. Nếu bạn thêm dấu ngã, điều đó về cơ bản sẽ tắt mọi thứ.
Vì vậy, với a và a bằng 60, 0 0 1 1 1 1 0 0,
nó sẽ không bằng 1 1 0 0 0 0 1 1.
Một điều thực sự thú vị khác mà bạn có thể làm với các toán tử nhị
phân là dịch chuyển, dịch chuyển sang trái và phải. Có một số điều quan trọng mà bạn biết
khi cần chuyển sang trái hoặc phải.
Trước hết, chúng ta biết rằng một int không dấu có nghĩa là chỉ
có thể là số dương. Nó không thể là tiêu cực.
Vì vậy, nếu bạn đang lưu trữ một giá trị âm trong đó, quá trình biên dịch sẽ chuyển đổi nó sẽ lâu hơn, nó sẽ chiếm rất nhiều kích thước.
Vì vậy, hãy nhớ int không dấu có nghĩa là bạn chỉ có thể có giá trị dương.
Các số nguyên có dấu có nghĩa là chúng có thể âm hoặc dương.
Nhưng nếu bạn muốn thay đổi, hãy
nhớ để chuyển sang trái, vì vậy bây giờ nếu chúng ta nói kết
quả bằng và giả sử chúng ta muốn dịch chuyển a, giả sử bằng 2,
điều quan trọng khác mà
bạn muốn biết là khi nào bạn có số nguyên, số nguyên,
hãy nhớ rằng, chúng là 4 byte trên hầu
hết các nền tảng. Nó phụ thuộc vào bạn có thể nhận được
kích thước bằng cách thực hiện kích thước của nhà điều hành. Vì vậy, số nguyên thực sự là
4 là 32 bit vì vậy thực sự con số là một
cái gì đó như thế này. 16 cái gì đó
như thế cái gì đó 4 8 12 16 20 24.
Vì vậy, bạn có thể một cái gì đó như thế và một cái gì đó tương tự.
Đó thực sự là con số. Tôi chỉ hiển thị 8 bit
cuối cùng vì phần còn lại là 0. Nhưng nếu bạn xem đây là một số
nguyên 32-bit, là 4 byte, thì nó sẽ như thế nào trong hệ
nhị phân, 4 0s 4 0s 4 0s 4 0s 4 0s 4 0s và
sau đó là 0 0 1 1 1 1 0 0 .
Và vì vậy bạn phải biết kích thước khi bạn thực hiện chuyển
sang trái hoặc phải vì nếu bạn dịch chuyển nhiều hơn 2, nó sẽ không rõ ràng.
Nó không rơi ra hoặc bất cứ điều gì tương tự.
Vì vậy, một lần nữa hãy để tôi đảm bảo 48 12 16 20 24
28 32 và điều tương tự sẽ xảy ra với 13.
Vì vậy, nếu bạn dịch chuyển sang trái lớn hơn
2, những gì bạn cuối cùng sẽ có là những số 1
này cũng sẽ dịch sang trái. Vì vậy, kết quả sẽ vẫn
là tất cả các số 0 trước đó,
nhưng sau đó bạn sẽ có 1 1 1 1 0 0 0 0.
Và đó sẽ bằng 240.
Và nếu tôi thực hiện một chuyển đổi nhanh, tôi sẽ nói trong đầu bằng cách
nói 1 3 7 15 30 60 122 40, nhưng chúng tôi
có thể xác nhận điều đó bằng cách xây dựng và chạy và bạn
sẽ thấy kết quả là 240.
Và chúng tôi thấy kết quả là 240.
Vì vậy, bây giờ nếu bạn thực sự muốn chuyển sang số nhiều hơn 2 của
tôi, hãy nói rằng bạn muốn chuyển sang 4, đây là lúc điều quan trọng là phải hiểu rằng đó là một số 32-bit.
Vì vậy, ở đây bạn thực sự sẽ phải sử dụng một số số 0 đó.
Vì vậy, nếu bạn muốn thay đổi 4 thực sự những gì bạn sẽ có là bạn sẽ chỉ
có một cái gì đó như vậy.
Và sau đó nếu bạn muốn nhóm chúng lại thành
4, bạn sẽ có một cái
gì đó giống như vậy. Vì vậy, kết quả ở
đây sẽ là một lần nữa nếu tôi làm điều này
trong đầu, bạn có 1 3 7 15 30 60 120
240 480 và sau đó là 960.
Hy vọng rằng, tôi đã làm điều đó đúng. Một lần nữa khi chúng tôi chạy điều này và
chúng tôi nói 960, vì vậy nó
đang chuyển sang bên trái. Nếu bạn muốn
chuyển sang phải, bạn sử dụng ký hiệu lớn hơn.
Vì vậy, chuyển sang toán tử dịch phải nhị phân phải,
bạn làm được nhiều hơn. Toán tử dịch trái nhị phân, bạn làm ít hơn.
Vì vậy, ở đây nếu bạn định chuyển sang bên phải, bạn muốn chuyển sang số 4 bên phải.
Và điều gì sẽ xảy ra nếu bạn có kết thúc ở đây, vì vậy nếu bạn có
60 ban đầu, bạn cố gắng đi 4. Bạn sẽ có các chữ số bị bỏ đi.
Vì vậy, thay vì có 4 cuối cùng mà ban
đầu chúng ta có 60. Do đó ta có
0 0 0 1 1 1 1 0 0, ta phải chuyển trên 4.
Vì vậy, cuối cùng chúng ta sẽ mất 2 bit vì chúng sẽ giảm xuống.
Và những gì chúng ta sắp
kết thúc là một cái gì đó giống
như thế này 0 0. Và vì vậy điều này sẽ chỉ bằng 3,
tương tự như vậy bạn thực sự bị mất bit vì bạn đang dịch chuyển sang phải quá
nhiều, bạn có kết quả là 3. Vì vậy, bạn phải cẩn thận
khi chuyển sang trái và phải, hãy đảm bảo rằng bạn sử dụng lại 32
bit 4 byte đó tùy thuộc vào hệ thống của bạn.
Đó là một bản tóm tắt nhanh về các toán tử bitwise.
Khi bạn nâng cao hơn, bạn phải hiểu cách bạn có
thể thực sự kiểm tra xem một bit cụ thể là 1 hay 0.
Nó khá đơn giản. Bạn chỉ cần làm một và trên đó.
Nhưng bạn phải viết nhiều mã hơn một chút.
Bài giảng này không nhằm mục đích là một cái nhìn toàn diện về các toán tử bitwise.
Tôi muốn cung cấp một cái nhìn tổng quan,
giúp bạn có một khởi đầu thuận lợi về nó. Nhưng để hiểu các toán tử này nhiều hơn,
bạn sẽ phải nghiên cứu thêm một chút và sử dụng chúng và thực hành chúng.
Vì vậy, tôi hy vọng điều này là hữu ích. Một lần nữa, nó có thể hơi khó
hiểu nên bạn muốn theo dõi và muốn thử với nó. Nhưng một lần nữa, cách tốt nhất để học là gì, hãy
viết một số mã, tìm hiểu một số ví dụ. Cảm ơn bạn.