反转一个值中的最后n位

  这是在《使用位运算显示二进制数》的基础上进一步扩展,实现反转一个值中最后n位,参数为n和要反转的值。

  ~可以一个字节中所有的位,而不是选定的少数位。为达到指定要求,需创建一个掩码,该掩码最后n位设为1,其余的位设为0。然后,对该掩码和一个值使用^运算就可以转置这个值得最后n位,同时保留该值的其他位不变。

  

 1 //使用位操作符来显示二进制并翻转该值的最后n位
 2 #include<stdio.h>
 3 char *itobs( int, char*);                //integer to binary string
 4 void show_bstr( const char*);        
 5 int invert_end(int, int);                 //关键算法
 6 main()
 7 {
 8     char bin_str[8 * sizeof(int) +1];
 9     int number;
10     int n;
11     while(scanf("%d", &number)==1)
12     {
13         itobs( number, bin_str);
14         printf("%d is \n", number);
15         show_bstr( bin_str);
16         putchar('\n');
17         puts("Enter an integer you want to invert:");
18         scanf("%d", &n);
19         number=invert_end(number, n);
20         printf("%Inverting the last %d bits gives\n", n);
21         show_bstr(itobs(number, bin_str));
22         putchar('\n');
23     }
24 }
25 char *itobs( int n, char *ps)
26 {
27     int i;
28     static int size = 8 * sizeof(int);
29     for( i=size-1; i>=0; i--, n>>=1)
30         ps[i]=(1&n)+'0';                   //01&n就是n的最后一位的值(1&n也行),该值为0或1。字符数组需要字符'0'或'1',加上'0'的ASCII编码可以完成转换
31     ps[size]='\0';
32     return ps;
33 }
34 //四位一组显示二进制字符串
35 void show_bstr(const char *str)
36 {
37     int i=0;
38     while(str[i])
39     {
40         putchar(str[i]);
41         if(++i%4==0  &&  str[i])
42             putchar('  ');
43     }
44 }
45 int invert_end(int num, int bits)
46 {
47     int mask = 0;
48     int bitval = 1;
49     while( bits-->0)
50     {
51         //mask|=bitval;    
52         //bitval<<=1;
53         mask|=1;mask<<=1;         //若用注释语句,则需注释本句
54     }
55     mask>>=1;                        //若用注释语句,则需注释本句
56     return num^mask;
57 }

 

转载于:https://www.cnblogs.com/anthozoan77/p/4070041.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
图像识别技术在病虫害检测中的应用是一个快速发展的领域,它结合了计算机视觉和机器学习算法来自动识别和分类植物上的病虫害。以下是这一技术的一些关键步骤和组成部分: 1. **数据收集**:首先需要收集大量的植物图像数据,这些数据包括健康植物的图像以及受不同病虫害影响的植物图像。 2. **图像预处理**:对收集到的图像进行处理,以提高后续分析的准确性。这可能包括调整亮度、对比度、去噪、裁剪、缩放等。 3. **特征提取**:从图像中提取有助于识别病虫害的特征。这些特征可能包括颜色、纹理、形状、边缘等。 4. **模型训练**:使用机器学习算法(如支持向量机、随机森林、卷积神经网络等)来训练模型。训练过程中,算法会学习如何根据提取的特征来识别不同的病虫害。 5. **模型验证和测试**:在独立的测试集上验证模型的性能,以确保其准确性和泛化能力。 6. **部署和应用**:将训练好的模型部署到实际的病虫害检测系统中,可以是移动应用、网页服务或集成到智能农业设备中。 7. **实时监测**:在实际应用中,系统可以实时接收植物图像,并快速给出病虫害的检测结果。 8. **持续学习**:随着时间的推移,系统可以不断学习新的病虫害样本,以提高其识别能力。 9. **用户界面**:为了方便用户使用,通常会有一个用户友好的界面,显示检测结果,并提供进一步的指导或建议。 这项技术的优势在于它可以快速、准确地识别出病虫害,甚至在早期阶段就能发现问题,从而及时采取措施。此外,它还可以减少对化学农药的依赖,支持可持续农业发展。随着技术的不断进步,图像识别在病虫害检测中的应用将越来越广泛。
以下是一个反转链表的C程序: ```c #include <stdio.h> #include <stdlib.h> typedef struct ListNode { int val; struct ListNode *next; } ListNode; ListNode* reverseList(ListNode* head) { ListNode *prev = NULL, *curr = head, *next = NULL; while (curr != NULL) { next = curr->next; curr->next = prev; prev = curr; curr = next; } return prev; } void printList(ListNode* head) { while (head != NULL) { printf("%d ", head->val); head = head->next; } printf("\n"); } int main() { ListNode *head = (ListNode*)malloc(sizeof(ListNode)); head->val = 1; head->next = (ListNode*)malloc(sizeof(ListNode)); head->next->val = 2; head->next->next = (ListNode*)malloc(sizeof(ListNode)); head->next->next->val = 3; head->next->next->next = NULL; printf("Original list: "); printList(head); head = reverseList(head); printf("Reversed list: "); printList(head); return 0; } ``` 在这个程序中,我们定义了一个链表节点结构体`ListNode`,并定义了一个函数`reverseList`,它接受一个链表头结点指针作为参数,并返回反转后的链表头结点指针。我们还定义了一个函数`printList`,它接受一个链表头结点指针作为参数,并打印出链表中所有节点的值。 在`reverseList`函数中,我们定义了三个指针变量`prev`、`curr`和`next`,用来保存当前节点、前一个节点和后一个节点。我们使用一个while循环遍历整个链表,每次将当前节点的下一个节点保存到`next`指针中,然后将当前节点的`next`指向前一个节点,最后将`prev`指针指向当前节点,`curr`指针指向`next`节点。当遍历完成后,`prev`指向的就是反转后的链表头结点,我们将它返回即可。 在`main`函数中,我们创建了一个包含三个节点的链表,并打印出原始链表和反转后的链表。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值