Mã:
#include <stdio.h>/*khai báo thư viện*/
unsigned func(char message[],int n) /*khai báo hàm func*/
{
unsigned CRC=0xFFFF; /*khai báo kiểu dữ liệu không dấu CRC=1111 1111 1111 1111(FFFF)*/
char CRC_LSB=0;
for(int i=0;i<n;i++) /*bắt đầu vòng lặp for*/
{
CRC^=(unsigned)message[i]; /* CRC xor với phần tử thứ i của mảng message*/
CRC_LSB=(char)(CRC&0x0001);/* and CRC với 0001 để lấy trọng số thấp (LSB) của CRC*/
CRC=(unsigned)((CRC>>1)&0x7FFF);/* dịch phải CRC 1 bit sau đó and với 0111 1111 1111 1111*/
}
message[i]=n++;/* phần tử thứ i của mảng messagese sẻ bằng n,sau đó n ++*/
printf("%x,%d
",CRC_LSB,n);/* in ra trọng số thấp của CRC và n */
return CRC; /*trả về giá trị của CRC */
printf("%d
",i);/* in giá trị i */
}
main()
{
char a[]={2,3,5,7};
int n=1;
unsign f;
f=func(a,n);/* gọi hàm func với mảng message sẽ là mảng a[] và n =1
printf("%x
",f);/* in giá trị của hàm func*/
printf("%d
",n);/* in giá trị của n */
printf("%d
",a[1]);/* in ra gí trị phần tử thứ nhất của mảng a[]*/
}
ta xét từ vòng lặp for ,khi i=0 thì sẽ lần lượt thực hiện các lệnh sau
Mã:
CRC^=(unsigned)message[i]; /* CRC xor với phần tử thứ i của mảng message*/
CRC_LSB=(char)(CRC&0x0001);/* and CRC với 0001 để lấy trọng số thấp (LSB) của CRC*/
CRC=(unsigned)((CRC>>1)&0x7FFF);/* dịch phải CRC 1 bit sau đó and với 0111 1111 1111 1111*/
}
ở lệnh CRC^=(unsigned)message[i] thì ta đã có mảng message giờ là mảng a[]={2,3,5,7},i=0 nên a[0]=2,từ đó CRC xor với 2 là 1111 1111 1111 1111 xor 0000 0000 0000 0010,ở lệnh xor thì khác là 1,giống là 0 ,nên kết quả cho ta CRC= 1111 1111 1111 1101.
trọng số thấp của CRC giờ là 1.(CRC_LSB=1)
CRC dịch phải 1 bit thành 0111 1111 1111 1110(0x7FFD) and với 7FFF sẽ bằng 7FFD,nên CRC giờ là 7FFD.
Sau đó lệnh
gán message[i]=1,sau đó n=n+1=2,nên lệnh
Mã:
printf("%x,%d
",CRC_LSB,n)
sẽ in ra là 1,2
lệnh sẽ in ra là 2 vì trong lệnh
thì khi n=1 (trong hàm main) thì i=0,sau đó i++ nên i đã được tăng thêm 1 thành 2 rồi.
Lệnh printf thứ nhất trong hàm main() in ra giá trị của f=func(a,n) sẽ là giá trị của CRC vì có lệnh return CRC là trả về giá trị của hàm.Nên lệnh
sẽ in ra là 7FFD.
lệnh printf thứ 2 trong hàm main() là
sẽ in ra giá trị của n là 1 vì n được khai báo trong hàm main nên là biến cục bộ.Biến này chỉ được sử dụng trong hàm này thôi,nên mọi tác động từ hàm func sẽ không ảnh hưởng gì đến biến này,nên n vẫn bằng 1.
Lệnh printf thứ 3 trong hàm main là
mảng này cũng được khai báo trong hàm main nên là cục bộ,sẽ không bị ảnh hưởng bởi hàm func,nên a[1] vẫn là 3,kết quả của lệnh printf này là 3.
Có sai sót gì thì xin các bạn bổ sung thêm,vì mình chỉ mới học C++ thôi.
- - - Nội dung đã được cập nhật ngày 13-08-2014 lúc 09:35 AM - - -
Mã:
int main()
{
int a=2,b=2,c=4,d;
d=(a>3?b:(c>3?c++:c+3));
return 0;
}
n=(i>0)?1:0 tương đương với
Mã:
if (i>0)
n=1;
else
n=0;
nên code trên tương đương với
Mã:
if (a>3)
d=b;
else if (c>3)
{d=c;
c=c+1;
};
else d=c+3;
NGUỒN SỈ ÁO KHOÁC DENIM NỮ TPHCM CHẤT LƯỢNG CAO Bạn muốn nhập sỉ áo khoác denim nữ để bắt đầu việc buôn bán Online phong cách nhưng lại chưa có kinh nghiệm, muốn sắm xưởng sỉ xống áo vừa có thể giải...
Xưởng sỉ áo khoác jeans denim giá...