30/09/2018, 17:41

Hỏi về phép dịch phải dịch trái trong c/c++

phần thao tác phép toán bit trong c/c++
e đọc 1 số tài liệu thấy
phép dich trái và phải được nói như sau:

Toán tử dịch trái <<
Khi toán tử dịch trái được thực hiện trên một toán hạng, những bit của toán hạng được dịch về bên trái. 
Các bít bị chuyển sang trái bị mất và 0 thay vào phía bên phải của toán hạng.

Toán tử dịch bit phải >>
Trong thao tác dịch bít phải, bít ở bên phải bị dịch chuyển sẽ bị mất và tùy thuộc vào loại của máy tính, số 1 hay số 0 sẽ được thêm vào ở bít ngoài cùng bên trái. 
Toán tử dịch chuyển cũng thường được nhắc đến như xoay trái và xoay phải.

ở chỗ toán tử dịch phải tùy thuộc vào loại của máy tính, số 1 hay số 0 sẽ được thêm vào ở bít ngoài cùng bên trái.
nhưng 1 số tài liệu thì luôn mặc định thêm 0 vào
và e muốn hỏi tùy thuộc vào loại của máy tính, số 1 hay số 0 sẽ được thêm vào ở bít ngoài cùng bên trái.
thì tùy thuộc ở đây là như thế nào? và chốt lại thì là thêm 0 hay 1 ạ

Chi Ngo viết 19:55 ngày 30/09/2018

Bạn đọc tài liệu nào nói thêm 1 vào bên trái ở kết quả của phép toán dịch bit phải vậy, chỉ mình với. Mình đọc thì toàn thấy là thêm 0 vào bên trái thôi.

abcxyz viết 19:42 ngày 30/09/2018

Bạn đọc tài liệu nào nói thêm 1 vào bên trái ở kết quả của phép toán dịch bit phải vậy, chỉ mình với. Mình đọc thì toàn thấy là thêm 0 vào bên trái thô

ebook Eddie’s basic guide to C Programmin
http://www.peoi.org/Courses/Coursesvi/cprog/temp/cprog11t7.html

Chi Ngo viết 19:54 ngày 30/09/2018

Ak, mình nghĩ ở đây tác giả có nhầm lần một chút giữa toán tử dịch bít và quay. Bạn xem ở đây nhé, https://en.wikipedia.org/wiki/Bitwise_operation

Killua viết 19:55 ngày 30/09/2018

tùy thuộc máy tính thế nào đc bạn ,phép dịch bit đó tùy thuộc bạn dịch bit của số âm hay dương , mình vd bạn dịch bit sang trái của 1 số âm thì phần thêm vào bên phải sẽ là 1 ,ngược lại nếu dịch số dương thì sẽ là 0

*grab popcorn* viết 19:48 ngày 30/09/2018

Tùy thuộc vào kiểu dữ liệu
như trong C, nếu kiểu dữ liệu có dấu (int, long,…)
thì nó sẽ theo bit trái cùng.
Còn nếu là kiểu ko dấu (unsigned int, unsigned long,…)
thì nó sẽ là số 0.

Ví dụ:

unsigned char a = 255; //bit: 1111 1111
char b = 255;
printf("%d %d",a>>3,b>>3);

1 cái sẽ ra 31, còn 1 cái sẽ ra -1;

abcxyz viết 19:52 ngày 30/09/2018

tùy thuộc máy tính thế nào đc bạn ,phép dịch bit đó tùy thuộc bạn dịch bit của số âm hay dương , mình vd bạn dịch bit sang trái của 1 số âm thì phần thêm vào bên phải sẽ là 1 ,ngược lại nếu dịch số dương thì sẽ là 0

Tùy thuộc vào kiểu dữ liệunhư trong C, nếu kiểu dữ liệu có dấu (int, long,…)thì nó sẽ theo bit trái cùng. Còn nếu là kiểu ko dấu (unsigned int, unsigned long,…)thì nó sẽ là số 0.

Ví dụ:

unsigned char a = 255; //bit: 1111 1111
char b = 255;
printf("%d %d",a>>3,b>>3);

1 cái sẽ ra 31, còn 1 cái sẽ ra -1;

hai bạn có thể viết 1 bài về Bitwise Operations được không

Tuyết Liên Hoa viết 19:57 ngày 30/09/2018

b thật ra bằng -1 mà.

superuser10 viết 19:57 ngày 30/09/2018

Thế dịch số học là ntn… bookmark để mai đọc

Bài liên quan
0