30/09/2018, 18:20
*(unsigned *)(void *) &n nghĩa là gì?
mọi người xem giúp em code này, code này là chuyển đổi số thực sang mã nhị phân.
#include <iostream>
using namespace std;
void nhiphan(unsigned n)
{
n >> 1 ? nhiphan(n >> 1) : 0;
cout << (n & 1);
}
void nhiphan(float n)
{
nhiphan(*(unsigned *)(void*)&n);
}
int main()
{
nhiphan(3.9f);
system("pause");
return 0;
}
cho em hỏi là *(unsigned *)(void *) &n
nghĩa là gì ạ???
với lại n >> 1 theo em biết là phép dịch chuyển bit sang phải, nghĩa là chia cho 2 ^ 1, vậy khi nào thì nó nhận giá trị âm ạ…Mong mọi người giúp em… Em cảm ơn ạ…
Bài liên quan
Theo trang này: http://www.learncpp.com/cpp-tutorial/38-bitwise-operators/
thì toán tử dịch bit có kết quả trả về là giá trị sau khi dịch bit.
Thế nên hàm này dùng giá trị trả về đó để kiểm tra xem khi nào n >> 1 còn khác 0
thì còn đệ quy với hàm
Trong hàm
các bước thực hiện từ phải qua trái như sau:
Nếu với câu trả lời này mà bạn vẫn chưa hiểu, có thể do bạn thiếu kiến thức về con trỏ và đệ quy. Nếu thế thì bạn cần tìm hiểu 2 khái niệm con trỏ và đệ quy trước khi đọc code này.
Con trỏ có kích thước bằng nhau, không phụ thuộc vào kiểu dữ liệu nên ép kiểu thoải mái
yeap…cảm ơn anh, em đã thông, cảm ơn 2 anh nhiều ạ … ở trường em mới dạy con trỏ nhưng thầy dạy ít quá, em nghe nói con trỏ mạnh nhưng lại rất khó nên em muốn tìm hiểu rõ về nó…
anh ơi… em chạy dòng code này:
‘’’
‘’’
em tưởng nó là 3 chứ… vì mình ép về kiểu `unsigned. Nhưng với kết quả này em nghĩ là không phải, anh có thể cho em biết kết quả nó trả về là gì ko ạ?