C语言 对字节的高位和低位进行互换!
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言 对字节的高位和低位进行互换!相关的知识,希望对你有一定的参考价值。
即第一位和第八位,第二位和第七位。(要求不用循环)
其实我的用意是想减少算法的时间复杂度,并不是说只要不用for或者while就可以了
我想现在最好的算法也是象楼下说的4次 ,但不知道有没有什么好办法可以控制在3次以下(比如用异或,移位,取反等等)
kookhit的算法和用for语句基本上是没有区别的了,不过还是要谢谢你!
#include "stdio.h"
int main()
unsigned char tmp1,tmp2;
printf("please input a char: ");
scanf("%c", &tmp1);
tmp2=
((tmp1&0x01)<<7)
|((tmp1&0x02)<<5)
|((tmp1&0x04)<<3)
|((tmp1&0x08)<<1)
|((tmp1&0x10)>>1)
|((tmp1&0x20)>>3)
|((tmp1&0x40)>>5)
|((tmp1&0x80)>>7);
printf("converted char is: %c\n", tmp2);
return 0;
参考技术A 可以直接用位运算:按位与,按位或,移位等
#include
"stdio.h"
int
main()
unsigned
char
tmp1,tmp2;
printf("please
input
a
char:
");
scanf("%c",
&tmp1);
tmp2=
((tmp1&0x01)<<7)
|((tmp1&0x02)<<5)
|((tmp1&0x04)<<3)
|((tmp1&0x08)<<1)
|((tmp1&0x10)>>1)
|((tmp1&0x20)>>3)
|((tmp1&0x40)>>5)
|((tmp1&0x80)>>7);
printf("converted
char
is:
%c\n",
tmp2);
return
0;
参考技术B #include "stdio.h"
struct bits_t
char b1:1;
char b2:1;
char b3:1;
char b4:1;
char b5:1;
char b6:1;
char b7:1;
char b8:1;
;
union u_cache
char c;
struct bits_t ch;
;
int main()
union u_cache tmp1,tmp2;
printf("please input a char: ");
scanf("%c", &tmp1.c);
tmp2.ch.b1 = tmp1.ch.b8;
tmp2.ch.b2 = tmp1.ch.b7;
tmp2.ch.b3 = tmp1.ch.b6;
tmp2.ch.b4 = tmp1.ch.b5;
tmp2.ch.b5 = tmp1.ch.b4;
tmp2.ch.b6 = tmp1.ch.b3;
tmp2.ch.b7 = tmp1.ch.b2;
tmp2.ch.b8 = tmp1.ch.b1;
printf("converted char is: %c\n", tmp2.c);
return 0;
参考技术C 按位交换也就4次
可以不用循环 参考技术D 赞成 高经理 的回答。
他的做法的对的。
Go语言判断一个字节的高位大于四
Go语言判断一个字节的高位大于四
1.步骤:
第一步,将该字节的低位清零(与0xF0进行&运算)
- 为了后面与0x40比较
- 0xF0转为二进制是1111 0000,&运算(两个同时为1,结果为1,否则为0)后该字节高位不变,低位清零
第二步,低位清零后的值与0x40进行比较
- 0x40转为二进制是0100 0000,低位清零后比较的就是高位
2.代码:
package main
import "fmt"
func main() {
var a uint8 = 0x68
var b uint8 = a & 0xF0
fmt.Printf("result : %t \n",boolCheck(b))
}
func boolCheck(x uint8) bool {
retutn x >= 0x40
}
3.输出:
true
以上是关于C语言 对字节的高位和低位进行互换!的主要内容,如果未能解决你的问题,请参考以下文章