$./app Sign detection [1] Power of two [2] Counting No. of bits set [3] Set or clear bits without branching[4] Find maximum value[5] Finding least common multiple[6] Finding the greatest commom divisor[7] 7 Enter the two values for finding GCD: 12 6 GCD is: 6 $./app Sign detection [1] Power of two [2] Counting No. of bits set [3] Set or clear bits without branching[4] Find maximum value[5] Finding least common multiple[6] Finding the greatest commom divisor[7] 7 Enter the two values for finding GCD: 5 12 GCD is: 1 $./app Sign detection [1] Power of two [2] Counting No. of bits set [3] Set or clear bits without branching[4] Find maximum value[5] Finding least common multiple[6] Finding the greatest commom divisor[7] 7 Enter the two values for finding GCD: 20 25 GCD is: 5 $./app Sign detection [1] Power of two [2] Counting No. of bits set [3] Set or clear bits without branching[4] Find maximum value[5] Finding least common multiple[6] Finding the greatest commom divisor[7] 7 Enter the two values for finding GCD: 12 8 GCD is: 4 $./app Sign detection [1] Power of two [2] Counting No. of bits set [3] Set or clear bits without branching[4] Find maximum value[5] Finding least common multiple[6] Finding the greatest commom divisor[7] 7 Enter the two values for finding GCD: 32 235 GCD is: 1 $
How to write an algorithm to find the number of bits set in a typical number ?
#include <stdio.h>
cbs ()
{
unsigned int v; /* count the number of bits set in v */
unsigned int c; /* c accumulates the total bits set in v */
printf("Enter v");
scanf("%u",&v);
for (c = 0; v ; c++)
{
v = v & (v - 1); /* clear the least significant bit set */
}
printf("The number of bits set in v is %u \n",c);
}
How to write an algorithm to detect if two integers have opposite signs ?
/* detect if two integers have opposite signs */
#include <stdio.h>
int x , y;
typedef int bool;
bool f;
int sdetect(x , y)
{
f = ((x ^ y) < 0);
if ( f == 1 ) {
printf("They have opposite signs\n");
}
else
{
printf("They have same signs\n");
}
}
How to write a program to connect to a PostgreSQL server ? (program may not be perfect )
#include <stdio.h>
#include <stdlib.h>
#include <postgresql/libpq-fe.h>
int main(int argc, char **argv)
{
const char *conninfo;
const char *serverversion;
PGconn *conn;
const char *paramtext = "server_version";
conninfo = "hostaddr = 127.0.0.1 dbname = test user = earl password = bigshot";
conn = PQconnectdb(conninfo);
if ( PQstatus(conn) != CONNECTION_OK )
{
printf("Unable to establish connection: %s",PQerrorMessage(conn));
return 1;
}
else
{
printf("Connection established!\n");
serverversion = PQparameterStatus(conn,paramtext);
printf("Server Version: %s\n",serverversion);
}
PQfinish(conn);
return 0;
}
Tinkering with the fping command
$fping 192.168.0.1
192.168.0.1 is alive
$fping 192.168.0.2
ICMP Host Unreachable from 192.168.0.103 for ICMP Echo sent to 192.168.0.2
ICMP Host Unreachable from 192.168.0.103 for ICMP Echo sent to 192.168.0.2
ICMP Host Unreachable from 192.168.0.103 for ICMP Echo sent to 192.168.0.2
ICMP Host Unreachable from 192.168.0.103 for ICMP Echo sent to 192.168.0.2
192.168.0.2 is unreachable
$fping 192.168.0.3
ICMP Host Unreachable from 192.168.0.103 for ICMP Echo sent to 192.168.0.3
ICMP Host Unreachable from 192.168.0.103 for ICMP Echo sent to 192.168.0.3
ICMP Host Unreachable from 192.168.0.103 for ICMP Echo sent to 192.168.0.3
ICMP Host Unreachable from 192.168.0.103 for ICMP Echo sent to 192.168.0.3
192.168.0.3 is unreachable
$fping -c1 192.168.0.1
192.168.0.1 : [0], 84 bytes, 0.29 ms (0.29 avg, 0% loss)
192.168.0.1 : xmt/rcv/%loss = 1/1/0%, min/avg/max = 0.29/0.29/0.29
$fping -c1 -s 192.168.0.1
192.168.0.1 : [0], 84 bytes, 0.27 ms (0.27 avg, 0% loss)
192.168.0.1 : xmt/rcv/%loss = 1/1/0%, min/avg/max = 0.27/0.27/0.27
1 targets
1 alive
0 unreachable
0 unknown addresses
0 timeouts (waiting for response)
1 ICMP Echos sent
1 ICMP Echo Replies received
0 other ICMP received
0.27 ms (min round trip time)
0.27 ms (avg round trip time)
0.27 ms (max round trip time)
0.000 sec (elapsed real time)
$
Hacking with httping for simple speed study
ABOUT httping
httping - measure the latency and throughput of a webserver
A TYPICAL SHELL SESSION
[bash]
$httping www.beautifulwork.org
PING www.beautifulwork.org:80 (www.beautifulwork.org):
connected to 80.79.116.205:80 (490 bytes), seq=0 time=809.49 ms
connected to 80.79.116.205:80 (490 bytes), seq=1 time=807.21 ms
connected to 80.79.116.205:80 (490 bytes), seq=2 time=788.23 ms
connected to 80.79.116.205:80 (490 bytes), seq=3 time=796.85 ms
^CGot signal 2
— www.beautifulwork.org ping statistics —
5 connects, 4 ok, 0.00% failed, time 7256ms
round-trip min/avg/max = 788.2/800.4/809.5 ms
$httping -c4 -g www.beautifulwork.org
PING www.beautifulwork.org:80 (www.beautifulwork.org):
connected to 80.79.116.205:80 (490 bytes), seq=0 time=786.45 ms
connected to 80.79.116.205:80 (490 bytes), seq=1 time=798.73 ms
connected to 80.79.116.205:80 (490 bytes), seq=2 time=806.86 ms
connected to 80.79.116.205:80 (490 bytes), seq=3 time=883.28 ms
— www.beautifulwork.org ping statistics —
4 connects, 4 ok, 0.00% failed, time 6276ms
round-trip min/avg/max = 786.4/818.8/883.3 ms
$httping -c4 -Gg www.beautifulwork.org
PING www.beautifulwork.org:80 (www.beautifulwork.org):
connected to 80.79.116.205:80 (1434 bytes), seq=0 time=819.49 ms
connected to 80.79.116.205:80 (1434 bytes), seq=1 time=799.30 ms
connected to 80.79.116.205:80 (1434 bytes), seq=2 time=830.68 ms
connected to 80.79.116.205:80 (1434 bytes), seq=3 time=806.28 ms
— www.beautifulwork.org ping statistics —
4 connects, 4 ok, 0.00% failed, time 6256ms
round-trip min/avg/max = 799.3/813.9/830.7 ms
$
$httping -c4 -Gg www.worldcuplivematches.net
PING www.worldcuplivematches.net:80 (www.worldcuplivematches.net):
connected to 119.18.56.76:80 (581 bytes), seq=0 time=6641.52 ms
connect time out
connected to 119.18.56.76:80 (581 bytes), seq=2 time=6047.30 ms
connect time out
— www.worldcuplivematches.net ping statistics —
4 connects, 2 ok, 50.00% failed, time 75717ms
round-trip min/avg/max = 6047.3/6344.4/6641.5 ms
$
$httping -c4 -Gg www.worldcuplivematches.net
PING www.worldcuplivematches.net:80 (www.worldcuplivematches.net):
connected to 119.18.56.76:80 (581 bytes), seq=0 time=628.55 ms
connected to 119.18.56.76:80 (581 bytes), seq=1 time=737.22 ms
connected to 119.18.56.76:80 (581 bytes), seq=2 time=629.63 ms
connected to 119.18.56.76:80 (581 bytes), seq=3 time=648.22 ms
— www.worldcuplivematches.net ping statistics —
4 connects, 4 ok, 0.00% failed, time 5644ms
round-trip min/avg/max = 628.6/660.9/737.2 ms
$
[/bash]
How to write a program to find endianess of a machine ?
#include <stdio.h>
#include <stdlib.h>
static inline int little_endian() {
int endian = 1;
return (0 == (*(char *)&endian));
}
int main (int argc, char **argv)
{
printf("This machine is ");
little_endian() ? printf("little") : printf("big");
printf(" endian\n");
exit(0);
}
How to write a program to modify a word using a bit mask ?
#include <stdio.h>
int main()
{
typedef int bool;
bool f; /* conditional flag */
unsigned int m; /* the bit mask */
unsigned int w; /* the word to modify: if (f) w |= m; else w &= ~m; */
printf("Enter the word to modify ");
scanf("%u",&w);
printf("Enter the bit mask ");
scanf("%u",&m);
/* w = w ^ ((-f ^ w) & m ); */
/* OR, for superscalar CPUs: */
w = (w & ~m) | (-f & m);
printf("Modified value is %u \n",w);
return 0;
}
Hacking the program for counting bits set
$gcc counting-bits-set-naive-way-related.c
$./a.out
Enter v 8474578
Total bits set in v is 11
$./a.out
Enter v 1
Total bits set in v is 1
$./a.out
Enter v 2
Total bits set in v is 1
$./a.out 3
Enter v a
Total bits set in v is 0
$cat counting-bits-set-naive-way-related.c
#include <stdio.h>
int main()
{
unsigned int v; /* count the number of bits set in v */
unsigned int c; /* c accumulates the total bits set in v */
printf("Enter v ");
scanf("%u",&v);
for(c = 0; v ; v >>= 1)
{
c = c + (v & 1);
}
printf("Total bits set in v is %u \n",c);
return 0;
}
$
Hacking bitwise left shift operation with PHP
<?php
$val = 1;
for($count = 0; $count <=10 ; $count++) {
echo "count is ..." . $count;
echo "\n";
echo "val is ..." . $val;
echo "\n";
$val = $val << 1;
}
?>